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';