为什么phpstring连接运算符是一个点(。)?
在PHP中, string运算符点(。)用于连接string。 例如:
$msg = "Hello there, " . $yourName;
点运算符在第一次看到它的时候似乎总是让人们(包括我自己)迷惑,特别是当你使用它连接2个string时,操作不会抛出错误,只是“默默地”失败。 在不使用此操作符的PHP和其他语言(如JavaScript,Python等)之间切换时也是一个常见的错误。
我的问题是,为什么该语言使用点(。)运算符而不是一个更广泛接受的运算符,如加号(+)? 有没有什么历史原因可以指出为什么这个运营商被选中? 只是因为点可以将其他variablestypes转换为string? 例如:
echo 1 . 2; //prints the string "12"
谢谢!
我认为有一个不同的运营商是一个好主意,因为点和加做完全不同的事情。
什么是"a string" + "another string";
实际上是指从非特定语言的angular度来看?
这是什么意思?
- 添加两个string的数值,或者,
- 连接两个string
你会假设它是第二个,但是除了string之外的所有情况下都使用加号来进行数字加法。 为什么?
另外,从一个松散的types的angular度来看(PHP是),一个PHP脚本
$myvar = 1; $myvar2 = 2; // would we expect a concatenation or addition? $concat = $myvar + $myvar2;
点符号因此指定明确用于连接。
这并不是混淆,而是因为所有其他语言都以不同的方式来做这件事,所以它并不直观。 而且,这是顺应潮stream的一个很好的理由吗? 按照他们总是这样做的方式,并不总是正确的做法。
加号不像您想象的串接string那样“被广泛接受”。 有很多不使用它的语言,包括Perl和C,因为这些是PHP的根源在哪里,所以PHP是有道理的。 许多语言甚至没有一个运营商, 你必须使用concat()
函数。
PHP是弱types的,并且会在看到加号或点时进行隐式types转换。 这意味着如果你做$x = "45 inches" + "20 inches";
,PHP将把$x
设置为65
。 如果使用点连接运算符,结果显然会非常不同。 如果您有$y = 5 . 10;
$y = 5 . 10;
。 这会给你510
,但是把它改成加号,你会得到一个完全不同的结果。
另外,从逻辑上思考,加号的反面是一个减号。 但是,这并不容易映射到串联。 (我曾经看到过一种语言,但它确实没有什么意义)
当你学习一种新的语言时,你对加号作为连接符的偏好纯粹是抵制变化(相当普遍的事情 – 我知道一些人最初讨厌Python,因为它缺less大括号!)
作为一个使用很多语言编程了很长时间的人,我可以告诉你,我更喜欢有一个明确的连接运算符。 使用相同的运算符在松散types的语言中进行添加和连接需要麻烦; 实际上,我会说这是Javascript最大的缺陷之一(这是来自一般是Javascript粉丝的人)。
Python是强types的,这意味着它可以脱离使用加号作为加法和连接操作符,因为它强制你使用相同的types; 你不能在Python中给一个string添加一个整数; 如果你需要,那么你必须明确地转换你的types,所以没有歧义,至less不要编译器。
然而,对于读者来说,这仍然是模棱两可的 – 从阅读代码中的任何给定加号的含义来看,可能不会立即显而易见。 在Python中使用它更容易,但是我个人还是希望有一个明确的运算符。 但这只是一种个人偏好, 如果我正在使用Python,Javascript或Visual Basic,那么我必须按照他们的规则工作。
在PHP中使用+作为连接运算符是不可能的,因为数字和数字的string是等价的。 你会有两个操作符使用相同的符号,而"3" + 3
结果必须是未定义的。 现在, "3" + 3
是6
, "3" . 3
"3" . 3
是"33"
。