在PHP中,string operator点(。)用于连接字符串。例如:
$msg = "Hello there, " . $yourName;
点运算符似乎总是让人们(包括我自己)在第一次看到它时感到困惑,特别是当你用它来连接2个字符串时,操作不会抛出错误而只是“默默地”失败。在PHP和其他语言(如JavaScript,Python等)之间切换时,这也是一个常见的错误。
我的问题是,为什么语言使用点(。)运算符而不是更广泛接受的运算符,如加号(+)?您是否有任何历史原因可以指出选择此运算符的原因?是因为点可以将其他变量类型转换为字符串吗?例如:
echo 1 . 2; //prints the string "12"
谢谢!
答案 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" + 3
为6
,"3" . 3
为"33"
。