59

我刚刚发现这会起作用:

echo $value , " continue";

但这不会:

return $value , " continue";

虽然在and语句中都有效,.而不是。,echoreturn

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

4

7 回答 7

70

return只允许一个表达式,但echo允许一个表达式列表,其中每个表达式用逗号分隔。

但请注意,由于echo不是函数而是一种特殊的语言结构,因此将表达式列表括在括号中是非法的。

于 2009-09-23T14:40:18.830 回答
40

您还必须注意,echo作为结构,使用逗号比使用点要快。

所以如果你加入一个角色 400 万次,你会得到:

echo $str1, $str2, $str3;

2.08

echo $str1 . $str2 . $str3;

3.48

正如您在上面看到的,它几乎需要一半的时间。

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

我们谈论的是几分之一秒,但仍然如此。

原始来源

于 2013-07-03T00:19:17.383 回答
20

.是 PHP 中的连接运算符,用于将两个字符串放在一起。

逗号可用于 的多个输入echo

于 2009-09-23T14:38:25.370 回答
11

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

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

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

使用点进行连接。

于 2009-09-23T14:39:46.897 回答
7

echo是一种语言结构(不是函数),可以接受多个参数,这就是为什么,有效。使用逗号会稍微均匀(但只有几纳秒,不用担心)

.是字符串的连接运算符(胶水)

于 2009-09-23T14:43:08.997 回答
5

echo实际上是一个函数(不是真的,但假设它是为了参数),它接受任意数量的参数并将它们连接在一起。

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

于 2009-09-23T14:39:45.507 回答
2

值得一提的是,连接运算符.的优先级高于许多其他运算符,并且与+and-运算符具有相同的优先级

为什么这很重要?

好吧,谈话很便宜让我给你看代码(来自PHP 文档

$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 时会给出相同的结果吗.,

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

让我们以这个案例为例

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

在这里,我们使用了Null 合并运算符,因此如果 $name 存在且不为 NULL,它将被返回,否则返回 Johnny。乍一看,人们可能会认为结果将是Here's Johnny,因为 $name 没有定义,或者他们希望如此。

其实结果会是

PHP Notice:  Undefined variable: name
Here's 

这里发生的事情是??运算符的优先级低于,.这意味着 PHP 将首先尝试评估(Here's $name)

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

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

或者干脆使用逗号。

echo ' Here\'s ' , $name ?? 'Johnny';
于 2020-02-05T20:30:29.850 回答