Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 与echo和return连接时句点和逗号之间的差异?_Php_Function_Compare_Concatenation_Language Construct - Fatal编程技术网

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

Php 与echo和return连接时句点和逗号之间的差异?,php,function,compare,concatenation,language-construct,Php,Function,Compare,Concatenation,Language Construct,我刚刚发现这会起作用: echo $value , " continue"; 但这并不是: return $value , " continue"; 而“.”在两种情况下都有效 这里的句点和逗号有什么区别?the是PHP中的串联运算符,用于将两个字符串放在一起 逗号可以用于echo的多个输入,实际上它是一个函数(不是真的,但为了参数起见),可以接受任意数量的参数并将它们连接在一起 虽然return不是一个函数,而是一个关键字,它告诉函数返回值,并试图将,解释为某种运算符。在使用return语

我刚刚发现这会起作用:

echo $value , " continue";
但这并不是:

return $value , " continue";
而“.”在两种情况下都有效


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

the
是PHP中的串联运算符,用于将两个字符串放在一起

逗号可以用于echo的多个输入,实际上它是一个函数(不是真的,但为了参数起见),可以接受任意数量的参数并将它们连接在一起

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

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


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

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

使用点进行连接。

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

echo
是一个语言构造(不是函数),可以接受多个参数,这就是
工作的原因。使用逗号会稍微均匀一些(但只有几纳秒,没什么好担心的)


是字符串的连接运算符(粘合剂)

您还需要注意的是,
echo
作为一个构造,使用逗号比使用点更快

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

echo$str1、$str2、$str3

大约2.08

echo$str1$str2$str3

大约3.48秒

这几乎花费了你上面看到的一半时间

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

我们谈论的是分数,但仍然是分数


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

为什么这很重要?

好吧,talk很便宜让我给你看看代码(来自)

事实上,从PHP7.4.0开始,第一行将发出一条弃用消息

不推荐:包含 在PHP8中,“.”和“+”/“-”都将更改:“+”/“-”将采用更高的值 优先权

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

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

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

让我们以这个案例为例

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

事实上,结果将是

PHP Notice:  Undefined variable: name
Here's 
这里发生的事情是
运算符的优先级低于
,这意味着PHP将首先尝试求值(这里是$name)

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

echo ' Here\'s ' . ($name ?? 'Johnny');
或者干脆用逗号

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

所以逗号只是echo的连接运算符?从这一点上讲,它不是一个连接,它只是一个变量的“列表”或echo的Sting…不,逗号是创建一个表达式列表供echo使用,echo在一行上打印时连接列表。但根本没有括号。
echo
不是函数调用,而是一种语言结构。PHP中的语言结构可以用括号调用,也可以不用括号调用。但我使用的是echo'something',而不是echo'something',比如说,不带括号的话。这是因为echo在PHP中是一个关键字,而且是一个函数。你可以把它写成echo('something','something other'),它也可以很好地工作。GSto和我正在详细地告诉您PHP文档中写了什么。它是有效的。echo('something','something');退出();分析错误:语法错误,意外“,”传递多个参数时不能使用括号。反正也没有人用括号。虽然不完美,但最接近!但是,如果只有argument@Pacerier括号会将列表中的第一个表达式括起来,就像您可以将任何表达式括起来一样。这可能会让来自其他类似C语言的人感到困惑,因为这些语言通常有逗号运算符(因此
1,2,3
是有效的表达式)但是PHP没有。
print
是一种语言构造,就像
echo
一样,但是解析器特别不允许在语句开头之后使用
echo
,因为它在其他任何地方都没有意义(
$echo=1;
不计算)
print
返回1,因此允许值出现在任何地方,即使在括号内。这对于调试一系列条件非常有用,例如以下
echo$a&&&(print'a')&&&$b&(print'b')| |$c&&(print'c')?1 : 0; //ac1
显然$a和$c是真实的,而$b不是。这里有一个更有趣的混乱:
echo4,打印3,打印2//43121echo ' Here\'s ' , $name ?? 'Johnny';