带大括号和不带大括号的echo方法的区别是什么?为什么这两种方法都存在?


What is the difference between echo with braces and without braces, and why do both methods exist?

我想我们大多数用php编程的人都学会了echo "string";。虽然很常见,但我想知道为什么我们使用这个函数与其他函数如此不同。

那我们为什么要这样做呢:

echo "Some String";

不是

echo("Some String");

为什么两者存在且行为不同?有没有提到为什么做出这样的选择?

人们参考php文档指出echo是一种语言结构,因此使用方式不同。但在这种情况下,既然我们既可以将其用作构造又可以用作函数,那么哪种方法更可取呢?为什么它只应该是一个语言结构,却被以两种方式实现?

同样适用于requirerequire_onceincludeinclude_once。我在网上找不到任何解释-为什么-这些结构也实现功能(在echo()的情况下,以一种有缺陷的方式)。

From php.net:

echo实际上不是一个函数(它是一个语言结构),所以您可以

如果你想传递多个参数给echo,这些参数

例子:

<?php
echo(1);        // < works fine
echo(1, 2, 3);  // < Parse error: syntax error, unexpected ',' on line 3
echo 1;         // < works fine
echo 1, 2, 3;   // < works fine
echo (1), (2), (3);   // < works fine

关于你的问题"为什么这两个方法都存在",使用大括号实际上并不是一个"方法"。这些大括号不属于echo,而是属于它的参数。在PHP中,几乎任何表达式都可以用大括号表示。例如,($a = 1);$a = (1)是有效的语句。所以它只是一个额外的对大括号。以及在trim(($str));中,第一对大括号属于函数,第二对属于它的参数。因此,现在您可以看出,使用带大括号的echo与使用带两对大括号的trim()一样符合逻辑。

上述内容也适用于include, require, require_onceinclude_once,以及其他语言结构,但有一些例外。例如,isset虽然是一个语言结构,但由于某种原因需要一对大括号。

请注意,正如在include的手册页中提到的,这些语言结构有一个返回值。由于像include 'fileA.php' == 'OK'这样的表达式不明显(根据运算符优先级),在检查返回值时,应该使用括号,要么将整个表达式括起来:(include 'fileA.php') == 'OK',要么只括参数:include('fileA.php') == 'OK'

从PHP文档

echo实际上不是一个函数(它是一个语言结构),所以您可以不需要使用括号。回声(不像其他的)语言结构)的行为不像函数,所以它不能总是在函数的上下文中使用。另外,如果你愿意的话若要向echo传递多个参数,则参数不能为

它不是一个函数,因此没有括号

因为是语句(语言结构),所以它不是函数。因此,要区分函数和语句,可以这样使用: