代码之家  ›  专栏  ›  技术社区  ›  Justin Ethier

为什么php字符串连接运算符是点(.)?[关闭]

  •  37
  • Justin Ethier  · 技术社区  · 14 年前

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

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

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

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

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

    谢谢!

    3 回复  |  直到 14 年前
        1
  •  29
  •   Codemwnci    14 年前

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

    做什么 "a string" + "another string"; 实际上是指,从非特定语言的角度来看?

    是不是意味着

    • 将两个字符串的数值相加,或者,
    • 连接两个字符串

    您可以假设它是第二个,但是除了字符串之外,所有情况下都使用加号进行数字加法。为什么?

    另外,从松散类型的角度(即PHP)来看,PHP脚本

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

    因此,点表示法指定它显然用于连接。

    这并不是说它令人困惑,而是因为它不是直观的,因为所有其他语言都是以不同的方式来做的。而且,这是顺应潮流的好理由吗?做事情的方式总是这样,并不总是正确的。

        2
  •  10
  •   Spudley Pat    14 年前

    加号并不像您想象的那样“被广泛接受”用于连接字符串。有一个 许多 对于不使用它的语言,包括Perl和C,由于这些是PHP的根所在,所以PHP遵循这些是有意义的。许多语言甚至没有运算符;您必须使用 concat() 功能。

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

    而且,从逻辑上讲,正数的反义词是负数。但这并不容易映射到连接。(我见过一种语言尝试过,但它真的没有多大意义)

    您之所以喜欢将加号作为连接符,纯粹是因为在学习新语言时不愿意改变(这是很常见的事情——我认识一些人,他们最初讨厌Python,因为Python缺少花括号!)

    作为一个长期使用多种语言编程的人,我可以告诉你,我更喜欢有一个明确的连接运算符。在松散类型的语言中使用相同的运算符进行添加和连接会带来麻烦;事实上,我认为这是Javascript最大的缺陷之一(而这通常来自于Javascript爱好者)。

    Python是stronly类型的,这意味着它可以不使用加号作为加法和连接运算符,因为它强制您使用同一类型;在Python中,不能向字符串添加整数;如果需要,则必须显式转换类型,这样就不会有歧义,至少不会对编译器造成歧义。

    然而,对于读者来说,仍然存在着模棱两可的地方——从阅读代码中任何给定的加号的含义来看,可能并不是很明显。在Python中更容易解决这个问题,但我个人还是希望有一个明确的操作符。但这只是个人偏好;如果我使用Python、Javascript或Visual Basic,那么我必须遵循它们的规则。

        3
  •  6
  •   Rosh Oxymoron    14 年前

    在PHP中不可能使用+作为连接运算符,因为数字和数字字符串之间是等价的。有两个运算符使用相同的符号,结果是 "3" + 3 必须是未定义的。现在, “3”+3 6 ,和 "3" . 3 "33" .