为什么php字符串连接运算符是一个点(。)?

时间:2010-11-24 12:33:27

标签: php operators string-concatenation

在PHP中,string operator点(。)用于连接字符串。例如:

$msg = "Hello there, " . $yourName;

点运算符似乎总是让人们(包括我自己)在第一次看到它时感到困惑,特别是当你用它来连接2个字符串时,操作不会抛出错误而只是“默默地”失败。在PHP和其他语言(如JavaScript,Python等)之间切换时,这也是一个常见的错误。

我的问题是,为什么语言使用点(。)运算符而不是更广泛接受的运算符,如加号(+)?您是否有任何历史原因可以指出选择此运算符的原因?是因为点可以将其他变量类型转换为字符串吗?例如:

echo 1 . 2;                //prints the string "12"

谢谢!

3 个答案:

答案 0 :(得分:28)

我认为拥有一个不同的运算符是一个好主意,因为dot和plus会做完全不同的事情。

从非特定语言的角度来看,"a string" + "another string";实际意味着什么?

是否意味着

  • 添加两个字符串的数值,或
  • 连接两个字符串

你会认为它是第二个,但除了字符串之外的所有情况都使用加号进行数字加法。为什么呢?

此外,从松散的类型(PHP是),一个PHP脚本

$myvar = 1;
$myvar2 = 2;

// would we expect a concatenation or addition?
$concat = $myvar + $myvar2;

点符号因此指定它明确用于连接。

这并不是令人困惑,而是它不直观,因为所有其他语言都以不同的方式进行。而且,这是跟随潮流的一个很好的理由吗?以他们总是这样做的方式做事并不总是正确的方式。

答案 1 :(得分:10)

加号并不像你想象的那样被广泛接受用于连接字符串。有一个很多的语言没有使用它,包括Perl和C,因为这些是PHP的根源所在,所以PHP跟随它是有意义的。许多语言甚至都没有操作员;你必须使用concat()函数。

PHP是弱类型的,当它看到加号或点时会进行隐式类型转换。这意味着,如果您执行$x = "45 inches" + "20 inches";,PHP会将$x设置为65。如果使用点连接运算符,结果将明显不同。如果您有$y = 5 . 10;,则同样适用。这将为您提供510,但将其更改为加号,您会得到完全不同的结果。

另外,从逻辑上考虑,加号的反面是减号。但这并没有如此容易地映射到连接。 (我已经看过一种尝试它的语言,但它确实没有多大意义)

你对加号作为连接符的偏好完全取决于学习新语言时的变化阻力(非常常见 - 我知道有些人最初讨厌Python,因为它没有花括号!)

作为使用大量语言编程了很长时间的人,我可以告诉你,我更喜欢有一个明确的连接运算符。使用相同的运算符以松散类型的语言进行添加和连接是一种麻烦;事实上,我会说这是Javascript最大的缺陷之一(这来自于一般都是Javascript粉丝的人)。

Python是stronly-typed,这意味着它可以使用加号作为加法和连接运算符,因为它会强制你使用相同的类型;你不能在Python中为字符串添加整数;如果你需要那么你必须明确地转换你的类型,所以没有歧义,至少不是编译器。

然而,读者仍然存在歧义 - 通过阅读代码中任何给定加号的含义,可能不会立即显而易见。 Python中更容易实现它,但我个人仍然希望有一个明确的运算符。但这只是个人偏好;如果我正在使用Python,Javascript或Visual Basic,那么我必须遵守他们的规则。

答案 2 :(得分:6)

由于数字和数字字符串之间的等价性,因此无法在PHP中使用+作为连接运算符。您有两个使用相同符号的运算符,"3" + 3的结果必须是未定义的。现在,"3" + 36"3" . 3"33"