我经常看到这样的说法:
"echo是语言结构,而print是函数,因此它具有返回值"
以及
"die是语言结构"
我的问题是什么是语言结构,更重要的是我们为什么需要它们?
"echo是语言结构,而print是函数,因此它具有返回值"
以及
"die是语言结构"
我的问题是什么是语言结构,更重要的是我们为什么需要它们?
PHP语言的语言构造是硬编码的,它们不遵循常规规则。
例如,如果您尝试访问不存在的变量,将会得到一个错误。要在访问变量之前测试它是否存在,您需要使用 isset
或 empty
函数:
if (isset($foo))
如果 isset
是一个普通的函数,你也会在这里得到一个警告,因为你正在访问 $foo
并将其传递给函数 isset
。但是由于 isset
是一种语言结构,所以它可以正常工作而不会引发警告。这就是为什么文档清楚地区分普通函数和语言结构的原因。语言结构是组成语言的要素:例如“if”、“for”、“while”、“function”等。
PHP手册中提到的“echo”、“die”或“return”等内容是为了表明它们不是函数,并且它们的行为并不总是像函数一样。
初学者可能会将“echo”称为“echo()”,这可能会导致困惑。这就是为什么他们在手册中清楚地区分它们的原因。以便让每个人都能理解。
其他被误认为是函数的语言结构的例子包括“array()”、“list()”和“each()”。
echo
的描述:它说void echo ( string $arg1 [, string $... ] )
但是 echo ($arg1, $arg2);
是无效的。 - Gumbo并非所有语言都是由函数构成的。必须有一些基础,用于实现那些最初的函数。这个基础的元素就是语言结构(或者说内置函数)。它们的行为不总是像“普通”函数那样。
print
语言结构,用于输出字符串。许多其他语言,如C,不会构建它,而是将其实现为函数。采取一种方法可能存在技术原因,但有时更具哲学意义——是否应将该功能视为核心或附加功能。isset(…)
由于其目的本身,可能引用不存在的内容。函数无法很好地处理这种情况。isset
)执行函数无法执行的操作;另一些(例如Array(…)
)则可采用两种方式之一。Array(…)
结构可以写成[...]
。$a ='print_r'; $a(…);
是可以的,但$a ='print'; $a(…);
则不行。list($el1, $el2) = array('el1', 'el2');
它从一个非关联数组中获取元素,并将这些值分配给在list()
结构中定义的变量。isset
和empty
。虽然它们看起来像函数,但有一件事是仅通过函数无法实现的——它们不会生成“未定义变量”或“未定义索引”的提示。isset
重新实现empty
函数:function empty(&$var) { return !isset($var) || !$var; }
- Gumboprint("asdf");
和 print "asdf";
一样,都会返回1。
echo("asdf");
相当于 echo "asdf;"
,但没有返回值。
die("asdf");
相当于 exit("asdf");
,也没有返回值。die
和exit
确实有一个值,但你永远看不到它。这就是为什么你可以在语句中使用它们,例如doSomething() or die('oops');
。or
运算符需要在值之间。 - Manngo