为什么要完全停止,"." 而不是加号,"+",用于PHP中的字符串连接?

Car*_*ine 34 php syntax perl concatenation operators

为什么PHP的设计者决定使用句号/句号/"." 作为字符串连接运算符而不是更常见的加号"+"?

这有什么好处,或者有什么理由吗?或者他们只是喜欢?:O)

Ben*_*mes 35

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

在弱类型语言中,使用不同的字符串连接和数字加法运算符是有好处的:您使用哪一个将影响语言强制变量的类型.

碰巧,Perl 6将使用波形符号~而不是点.来进行字符串连接,因为.它将用于对象成员访问.所以看来Perl的设计师现在认为这是一个糟糕的选择.

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

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

  • "."事实上的标准化.作为方法操作员发布日期采用"." 用于在Perl中连接然后影响PHP.并且perl最初没有面向对象.正是因为现在每个人都期望"." 指示Perl 6采用新语法的对象的方法(从perl的角度来看)允许"." 用于方法并使用"〜"进行连接. (4认同)
  • 没有真正回答"为什么使用一段时期"的问题.它只是推迟了答案. (3认同)

Dan*_*May 24

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

但是,我们可以深入研究它并找出为什么在Perl中实现它 - +运算符最常用于数学方程 - 它仅用于语言中的连接,其中变量类型可以定义运算符的工作方式(简单的解释,例子是C#)

var intAddition = 1 + 2;
Console.WriteLine(intAddition); // Prints 3
var stringConcat = "1" + "2";
Console.WriteLine(stringConcat); // Prints "12"
Run Code Online (Sandbox Code Playgroud)

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


也许推理变为较低的水平,并且由于布尔代数逻辑门 - +装置OR中的逻辑门,而.被用作AND操作员-这是有意义的,当涉及到字符串连接.

有两个独立的运算符是有意义的,一个用于连接,另一个用于添加 - 不幸的是,由于其他语言,这两个运算符可能会混淆.


Pau*_*ieh 21

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

$first  = 100;
$second = 20;
$stringresult     = $first . $second; // "10020"
$arithmeticresult = $first + $second; // 120
Run Code Online (Sandbox Code Playgroud)

  • 为清楚起见 - `$ stringresult`返回"10020"并且`$ arithmeticresult`返回`120`. (6认同)
  • @Pavel:为什么`.`不是串联的"理智的运算符"?而且因为你习惯使用`.`作为对象成员并不能使它成为最合乎逻辑的运算符.(PHP选择` - >`是非常好的IMO.) (2认同)

Sar*_*raz 13

逻辑+用于数字.例如,一个用于连接段落中的两个句子(字符串).因此,dot用于连接字符串.所以我相信这是合乎逻辑的.这样的方式更好......

  • 您多久使用字符串连接来连接句子?此外,dot是一个句子_terminator_,而不是一个句子_separator_,所以类比打破了. (8认同)
  • 类比是不完美的,电影在11. (5认同)

Ski*_*ick 8

Douglas Crockford认为+ for Concatenation是一个坏主意:

JavaScript有一些设计错误,例如+的重载意味着类型强制的加法和连接


Joe*_*oey 7

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

具有不同的字符串连接和加法运算符也是有意义的,尤其是在弱类型语言中.PHP中已经有足够的陷阱让你自己在脚下射击,你不需要添加另一个.


mau*_*ris 5

我更喜欢使用句号代替加号,因为我通常将+与数学方程联系起来.

例如 "this is a string " + 56 + 20

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

但是,对于连接运算符使用完全停止的缺点是它只是屏幕上的一个点,有时您无法看到它是在字符串中还是在字符串外部.

  • 如果你不习惯它会感到困惑.在Java和C#中,这是常态. (5认同)
  • "习惯它"与它无关.我已经写了几年C#,在1999年以前的Java之前,这个模糊的废话仍然让我感到困惑.(相比之下,Haskell的字符串连接运算符花了我大约10秒才弄明白.)糟糕的语法示例就像混蛋:每种语言都有一个,它们都很臭. (4认同)

o.k*_*k.w 5

这不回答问题,只是想分享一些东西.

PHP手册:字符串运算符,有人发布了这个我觉得很有趣.注意空间如何在输出中起作用.

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

<?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

?>
Run Code Online (Sandbox Code Playgroud)