omg*_*omg 54 php compare function concatenation language-construct
我发现这会起作用:
echo $value , " continue";
Run Code Online (Sandbox Code Playgroud)
但这不是:
return $value , " continue";
Run Code Online (Sandbox Code Playgroud)
而"." 适用于两者.
句号和逗号之间有什么区别?
Pat*_*ins 11
Dot(.
)用于连接变量或字符串.这就是为什么它在连接两个字符串时回显的原因,并且当你在方法中返回一个字符串的串联时它可以工作.但是逗号没有连接,这就是return语句不起作用的原因.
echo
是一个语言结构,可以采用多个表达式,这就是逗号的工作原理:
void echo ( string $arg1 [, string $... ] )
Run Code Online (Sandbox Code Playgroud)
使用点进行连接
值得一提的是,串联运算符.
比许多其他运算符具有更高的优先级,并且与+
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";
Run Code Online (Sandbox Code Playgroud)
事实上,从 PHP 7.4.0 开始,第一行将发出一条弃用消息
已弃用:同时包含“.”的无括号表达式的行为 和 '+'/'-' 将在 PHP 8 中发生变化:'+'/'-' 将具有更高的优先级
因此,在 PHP 8 中,这种情况下的关联性问题似乎可以通过给予+
和-
运算符更高的优先级来解决。
那么我们现在可以说.
和,
使用 echo 时给出相同的结果吗?
不,他们不会总是给出相同的结果
我们以这个案例为例
echo ' Here\'s ' . $name ?? 'Johnny';
Run Code Online (Sandbox Code Playgroud)
这里我们使用了Null 合并运算符,因此如果 $name 存在并且不为 NULL,它将被返回,否则将返回 Johnny。乍一看,人们可能会认为结果将是Here's Johnny,因为 $name 未定义,或者他们希望如此。
实际上结果会是
PHP Notice: Undefined variable: name
Here's
Run Code Online (Sandbox Code Playgroud)
这里发生的情况是,??
运算符的优先级低于,这.
意味着 PHP 将首先尝试计算(Here's $name)。
您可以通过将表达式括在括号中来解决此问题
echo ' Here\'s ' . ($name ?? 'Johnny');
Run Code Online (Sandbox Code Playgroud)
或者直接使用逗号。
echo ' Here\'s ' , $name ?? 'Johnny';
Run Code Online (Sandbox Code Playgroud)