Jus*_*ier 38 php string-concatenation operators
在PHP中,字符串运算符点(.)用于连接字符串.例如:
$msg = "Hello there, " . $yourName;
Run Code Online (Sandbox Code Playgroud)
点运算符似乎总是在他们第一次看到它时混淆了人(包括我自己),特别是当你用它来连接2个字符串时,操作不会抛出错误而只是"默默地"失败.在PHP和其他不使用此运算符的语言(如JavaScript,Python等)之间切换时,这也是一个常见的错误.
我的问题是,为什么语言使用点(.)运算符而不是更广泛接受的运算符,如加号(+)?您是否有任何历史原因可以指出选择此运算符的原因?是因为点可以将其他变量类型转换为字符串吗?例如:
echo 1 . 2; //prints the string "12"
Run Code Online (Sandbox Code Playgroud)
谢谢!
Cod*_*nci 29
我认为这是有一个不同的运营商是个好主意,因为点和加做完全不同的事情.
"a string" + "another string";从非特定语言的角度来看,究竟意味着什么?
这是不是意味着
你会认为它是第二个,但除了字符串之外的所有情况都使用加号进行数字加法.为什么?
此外,从松散的类型(PHP是),一个PHP脚本
$myvar = 1;
$myvar2 = 2;
// would we expect a concatenation or addition?
$concat = $myvar + $myvar2;
Run Code Online (Sandbox Code Playgroud)
点符号因此指定它明确用于连接.
这并不是令人困惑,而是它不直观,因为所有其他语言都以不同的方式进行.而且,这是跟随潮流的一个很好的理由吗?以他们总是这样做的方式做事并不总是正确的方式.
Spu*_*ley 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,那么我必须遵守他们的规则.
由于数字和数字字符串之间的等价性,因此无法在PHP中使用+作为连接运算符.你有两个运算符使用相同的符号,结果"3" + 3必须是未定义的.现在,"3" + 3是6,"3" . 3是"33".