我刚刚发现这会起作用:
echo $value , " continue";
但这不会:
return $value , " continue";
虽然在and语句中都有效,.
而不是。,
echo
return
这里的句号和逗号有什么区别?
我刚刚发现这会起作用:
echo $value , " continue";
但这不会:
return $value , " continue";
虽然在and语句中都有效,.
而不是。,
echo
return
这里的句号和逗号有什么区别?
您还必须注意,echo
作为结构,使用逗号比使用点要快。
所以如果你加入一个角色 400 万次,你会得到:
echo $str1, $str2, $str3;
约2.08秒
echo $str1 . $str2 . $str3;
约3.48秒
正如您在上面看到的,它几乎需要一半的时间。
这是因为带点的 PHP首先连接字符串然后输出它们,而带逗号的只是一个接一个地打印出来。
我们谈论的是几分之一秒,但仍然如此。
.
是 PHP 中的连接运算符,用于将两个字符串放在一起。
逗号可用于 的多个输入echo
。
点 ( .
) 用于连接变量或字符串。这就是为什么当您在连接两个字符串时回显时它起作用的原因,并且当您在方法中返回字符串的串联时它起作用。但是逗号不会连接,这就是 return 语句不起作用的原因。
echo
是一种可以采用多个表达式的语言结构,这就是逗号起作用的原因:
void echo ( string $arg1 [, string $... ] )
使用点进行连接。
echo
是一种语言结构(不是函数),可以接受多个参数,这就是为什么,
有效。使用逗号会稍微均匀(但只有几纳秒,不用担心)
.
是字符串的连接运算符(胶水)
echo
实际上是一个函数(不是真的,但假设它是为了参数),它接受任意数量的参数并将它们连接在一起。
虽然return
不是一个函数,而是一个关键字,它告诉函数返回值,它试图解释,
为某种运算符。在使用语句的情况下,您应该使用.
作为连接运算符。return
值得一提的是,连接运算符.
的优先级高于许多其他运算符,并且与+
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';