我想我们大多数用php编程的人都学会了echo "string";
。虽然很常见,但我想知道为什么我们使用这个函数与其他函数如此不同。
那我们为什么要这样做呢:
echo "Some String";
echo("Some String");
为什么两者存在且行为不同?有没有提到为什么做出这样的选择?
人们参考php文档指出echo是一种语言结构,因此使用方式不同。但在这种情况下,既然我们既可以将其用作构造又可以用作函数,那么哪种方法更可取呢?为什么它只应该是一个语言结构,却被以两种方式实现?
同样适用于require
、require_once
、include
和include_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_once
和include_once
,以及其他语言结构,但有一些例外。例如,isset
虽然是一个语言结构,但由于某种原因需要一对大括号。
请注意,正如在include的手册页中提到的,这些语言结构有一个返回值。由于像include 'fileA.php' == 'OK'
这样的表达式不明显(根据运算符优先级),在检查返回值时,应该使用括号,要么将整个表达式括起来:(include 'fileA.php') == 'OK'
,要么只括参数:include('fileA.php') == 'OK'
。
从PHP文档
echo实际上不是一个函数(它是一个语言结构),所以您可以不需要使用括号。回声(不像其他的)语言结构)的行为不像函数,所以它不能总是在函数的上下文中使用。另外,如果你愿意的话若要向echo传递多个参数,则参数不能为
它不是一个函数,因此没有括号
因为是语句(语言结构),所以它不是函数。因此,要区分函数和语句,可以这样使用: