当与echo和return连接时,句点和逗号之间的差异?

时间:2009-09-23 14:36:48

标签: php function compare concatenation language-construct

我刚发现这会起作用:

echo $value , " contiue";

但这不是:

return $value , " contiue";

而“。”适用于两者。

这里的句号和逗号之间有什么区别?

7 个答案:

答案 0 :(得分:64)

return只允许一个表达式。但是echo允许表达式列表,其中每个表达式用逗号分隔。但请注意,由于echo不是函数而是特殊语言构造,因此将表达式列表括在括号中是非法的。

答案 1 :(得分:28)

您还必须注意echo作为构造使用逗号 比使用点更快

所以,如果你加入一个角色400万次,这就是你得到的:

  

echo $ str1,$ str2,$ str3;

     
    

关于 2.08

  
     

echo $ str1。 $ str2。 $ STR3;

     
    

关于 3.48

  

如上所示,它几乎需要一半的时间。

这是因为带点的PHP连接字符串首先然后输出它们,而逗号只是一个接一个地打印出来。

我们正在谈论分数,但仍然。

Original Source

答案 2 :(得分:19)

.是PHP中的连接运算符,用于将两个字符串放在一起。逗号可用于多个输入以进行回显。

答案 3 :(得分:10)

Dot(.)用于连接变量或字符串。这就是为什么它在连接两个字符串时回显的原因,并且当你在方法中返回一个字符串的串联时它可以工作。但是逗号没有连接,这就是return语句不起作用的原因。

echo是一种语言结构,可以使用多个表达式,这就是逗号的工作原理:

void echo ( string $arg1  [, string $...  ] )

使用点进行连接

答案 4 :(得分:7)

echo是一种语言结构(不是一个函数),可以使用多个参数,这就是,有效的原因。使用逗号会略微均匀(但只有几纳秒,无需担心)

.是字符串

的连接运算符(粘合剂)

答案 5 :(得分:5)

echo实际上是一个函数(不是真的,但让我们说它是用于参数),它接受任意数量的参数并将它们连接在一起。

虽然return不是函数,而是一个关键字,它告诉函数返回值,并且它试图将,解释为某种运算符。在使用return语句时,您应该使用.作为连接运算符。

答案 6 :(得分:0)

值得一提的是,串联运算符.的优先级高于其他许多运算符,并且与+-运算符的优先级相同

为什么这很重要?

好吧,谈话很便宜,让我向您展示代码(摘自PHP documentation

$x = 4;
// this line might result in unexpected output:
echo "x minus one equals " . $x-1 . ", or so I hope\n";
// because it is evaluated like this line:
echo (("x minus one equals " . $x) - 1) . ", or so I hope\n";
// the desired precedence can be enforced by using parentheses:
echo "x minus one equals " . ($x-1) . ", or so I hope\n";

实际上,从PHP 7.4.0开始,第一行将发布弃用消息

已弃用:包含以下内容的非括号表达式的行为 都“。”和'+'/'-'将在PHP 8中更改:'+'/'-'将花费更高 优先

因此在PHP 8中,似乎可以通过为+-运算符赋予更高的优先级来解决这种情况下的关联性问题。

那么我们现在可以说使用回声时的.,会得到相同的结果吗?

不,他们不会总是给出相同的结果

让我们以这种情况为例

echo ' Here\'s ' . $name ?? 'Johnny';

这里我们使用了Null coalescing operator,所以如果$ name存在并且不为NULL,它将被返回,否则返回Johnny。乍一看,可能会认为结果是这里是Johnny ,因为未定义$ name,所以他们希望如此。

实际上结果是

PHP Notice:  Undefined variable: name
Here's 

这里发生的是??运算符的优先级比.低,这意味着PHP将首先尝试评估(此处为$ name)

您可以通过将表达式放在括号中来解决此问题

echo ' Here\'s ' . ($name ?? 'Johnny');

或者只是使用逗号。

echo ' Here\'s ' , $name ?? 'Johnny';