PHP:什么是语言结构?为什么我们需要它们?

Zac*_*112 14 php

我不断发表如下声明:

  • "echo是一种语言结构,但是print是一个函数,因此具有返回值"
  • "死是一种语言结构"

我的问题是这些语言结构是什么,更重要的是我们为什么需要它们?

dec*_*eze 21

语言结构被硬编码到PHP语言中.他们不遵守正常规则.

例如,每当您尝试访问不存在的变量时,您都会收到错误.要在访问变量之前测试变量是否存在,您需要咨询issetempty:

if (isset($foo))
Run Code Online (Sandbox Code Playgroud)

如果isset是正常函数,那么你也会收到警告,因为你正在访问$foo它以将它传递给函数isset.既然isset是语言结构,那么这可以不引发警告.这就是文档在正常函数和语言结构之间做出明确区分的原因.


sel*_*oup 7

语言结构是语言的组成部分:"if""for""while""function"等等.

在像"回声","死"或"返回" PHP手册中提到的有没有作出明确表示,这些都不是功能和他们并不总是表现得像功能.

您可以将"echo"称为"echo()",这样可能会让初学者感到困惑.这就是为什么他们在手册中加入明确的消毒.让每个人都清楚.

可能被误认为函数的语言结构的其他示例是"array()","list()"和"each()".

  • 不幸的是,PHP手册中语言结构的语法描述也令人困惑.只需看看`echo`的那个:它说`void echo(string $ arg1 [,string $ ...])`但是`echo($ arg1,$ arg2);`无效. (3认同)

Nar*_*adu 6

要理解这个问题的答案,您必须了解解析器的工作原理。语言是由语法定义的,而语法是通过关键字定义的。

语言结构是构成 PHP 语言基础的代码片段。解析器直接处理它们而不是函数。


Den*_*ink 2

有些事情使用普通函数是不可能的,请考虑以下代码片段:

\n\n

list($el1, $el2) = array(\'el1\', \'el2\');

\n\n

它的作用是从非关联数组中获取元素并将值分配给构造中定义的变量list()

\n\n

根本无法用函数来完成:)

\n\n

一个更微妙的例子是issetempty。虽然它们看起来像函数,但它们是单独使用函数不可能实现的一件事 \xe2\x80\x93 它们不会生成“变量未定义”或“未定义索引”通知。

\n