Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么是句号&引用;而不是加号“+&引用;,用于PHP中的字符串连接?_Php_Perl_Syntax_Operators_Concatenation - Fatal编程技术网

为什么是句号&引用;而不是加号“+&引用;,用于PHP中的字符串连接?

为什么是句号&引用;而不是加号“+&引用;,用于PHP中的字符串连接?,php,perl,syntax,operators,concatenation,Php,Perl,Syntax,Operators,Concatenation,为什么PHP的设计者决定使用句号/period/“”作为字符串 串联运算符,而不是更常见的加号“+” 这有什么好处吗,或者有什么理由吗?还是他们只是喜欢o) 我也更喜欢用句号而不是加号,因为我通常把+和数学方程联系起来 例如“这是一个字符串”+56+20 这对编译器/解释器和开发人员来说都是非常混乱的 然而,对串联运算符使用句号的缺点是,它只是屏幕上的一个点,有时您无法看到它是在字符串中还是在字符串外部 PHP的语法受Perl的影响,是Perl中的字符串连接运算符 在弱类型语言中,使用不同的字符

为什么PHP的设计者决定使用句号/period/“”作为字符串 串联运算符,而不是更常见的加号“+”


这有什么好处吗,或者有什么理由吗?还是他们只是喜欢o) 我也更喜欢用句号而不是加号,因为我通常把+和数学方程联系起来

例如
“这是一个字符串”+56+20

这对编译器/解释器和开发人员来说都是非常混乱的


然而,对串联运算符使用句号的缺点是,它只是屏幕上的一个点,有时您无法看到它是在字符串中还是在字符串外部

PHP的语法受Perl的影响,
是Perl中的字符串连接运算符

在弱类型语言中,使用不同的字符串连接运算符和数字加法运算符有很多优点:使用哪种运算符将影响语言强制变量使用哪种类型

碰巧,Perl 6将使用波浪号
~
而不是点
进行字符串连接,因为
将用于对象成员访问。因此,Perl的设计者现在似乎认为这是一个错误的选择

也许,在Perl和PHP早期的非面向对象的日子里,它似乎是一个很好的选择。也许这两种语言的设计者从未想过它们会成为强大的OO语言


至于PHP是否有一天会抛弃
->
成员访问语法,谁知道呢?

在PHP中使用点作为字符串连接运算符可能要追溯到Perl。请记住,PHP曾经只是一堆Perl脚本


另外,使用不同的字符串连接和加法运算符也是有意义的,特别是在弱类型语言中。PHP中已经有足够多的陷阱,你不需要再添加一个了。

我想这是为了让你可以将数字与字符串连接起来

$i=100;
$str="hello";
$str2 = $str.$i

由于不声明变量类型,使用+可以得到100而不是“hello100”的结果。

逻辑上+用于数字。例如,用于连接段落中的两个句子(字符串)。因此,点用于连接字符串。所以我相信这是非常合乎逻辑的。这样更好…

这并没有回答问题,只是想分享一些东西

从,有人张贴了这个,我觉得很有趣。请注意空间是如何在输出中发挥作用的

摘录:
如果尝试使用串联运算符添加数字,则结果将是这些数字作为字符串的结果

<?php

echo "thr"."ee";           //prints the string "three"
echo "twe" . "lve";        //prints the string "twelve"
echo 1 . 2;                //prints the string "12"
echo 1.2;                  //prints the number 1.2
echo 1+2;                  //prints the number 3

?>

我不是PHP专家,但是,你如何区分最后两行呢

$first  = 100;
$second = 20;
$stringresult     = $first . $second; // "10020"
$arithmeticresult = $first + $second; // 120

最明显的原因可能是PHP从Perl继承了很多语法,Perl使用点(
)进行字符串连接。

但是,我们可以更深入地研究它,找出为什么这是在Perl中实现的,
+
运算符最常用于数学方程,它只用于在变量类型可以定义运算符工作方式的语言中的串联(简单的解释,例如C#)

^如您所见,
+
运算符在C#中用于连接和加法


可能推理的层次较低,这是由于逻辑门中的-
+
表示
的布尔代数,而
用作
运算符,这在字符串串联时是有意义的


有两个单独的运算符是有意义的,一个用于连接,另一个用于加法——不幸的是,由于其他语言的原因,这两个运算符可能会混淆。

这里有一点历史背景

  • PHP语言最初是一组Perl脚本
  • 因此,PHP的大部分语法都来自Perl
  • Perl和PHP扩展都有非类型化变量

         "5"  ==   5
    "5" + 5   ==  10
    "5" . 5   ==  55
    
  • 为了能够区分加法和串联,它们必须是两个不同的运算符
  • Perl从C
    ->
    复制了方法访问操作符
  • 这是在许多现代编程语言开始使用
    进行方法访问之前的
  • 串联是更常见的操作之一,应该使用更少的字符。根据哈夫曼编码
  • 是可用于此用途的少数字符之一。另一个使用起来有意义的方法是
    ~
    ,这可能就是为什么现在使用perl6连接运算符的原因

+
应始终定义为交换操作(即a+B=B+a)。在字符串连接的情况下,情况并非如此(“foo”+“bar”!=“bar”+“foo”)。因此,
+
不是用于串联操作的好操作符。语言作者在使用
时是否考虑到了这一点(这接近于乘法运算符,对于乘法运算符,交换性不一定成立)还有待观察,但这仍然是一个很好的决定。

:

JavaScript也有一些设计错误,比如+的重载意味着两者 使用类型强制的添加和连接


虽然这不是历史原因,但它可能会向您展示为什么在PHP中使用单独的运算符进行加法和串联是很好的

原因是我们在JavaScript中看到的。我们也使用
+
字符进行连接和添加。在PHP中,我们为这两种语言提供了一个单独的运算符,这对于隐式
     "5"  ==   5
"5" + 5   ==  10
"5" . 5   ==  55