我不断发表如下声明:
我的问题是这些语言结构是什么,更重要的是我们为什么需要它们?
答案 0 :(得分:20)
语言结构被硬编码到PHP语言中。他们不遵守正常的规则。
例如,每当您尝试访问不存在的变量时,您都会收到错误消息。要在访问变量之前测试变量是否存在,您需要咨询isset
或empty
:
if (isset($foo))
如果isset
是正常函数,那么您也会收到警告,因为您正在访问$foo
以将其传递给函数isset
。由于isset
是一种语言结构,因此无需发出警告即可。这就是文档在正常函数和语言结构之间做出明确区分的原因。
答案 1 :(得分:7)
语言结构是语言的组成部分:“if”“for”“while”“function”等等。
PHP手册中提到的诸如“echo”,“die”或“return”之类的内容是为了清楚地表明这些不是函数,并且它们并不总是像函数一样。
你可以将“echo”称为“echo()”,这样可能会让初学者感到困惑。这就是为什么他们在手册中加入明确的消毒。为了让每个人都清楚明白。
可能被误认为函数的语言结构的其他示例是“array()”,“list()”和“each()”。
答案 2 :(得分:4)
并非所有语言都可以成为函数。必须有一些基础,在某个地方,您可以在其上实现第一个功能。这个基础的元素是语言结构(或者,内置函数)。它们并不总是像“正常”函数那样。
答案 3 :(得分:4)
要理解这个问题的答案,您必须了解解析器的工作原理。语言由语法定义,语法通过关键字定义。
语言结构是构成PHP语言基础的代码片段。解析器直接处理它们而不是函数。
答案 4 :(得分:2)
使用普通函数有些事情是不可能的,请考虑以下代码段:
list($el1, $el2) = array('el1', 'el2');
它的作用是从非关联数组中获取元素,并将值分配给list()
构造中定义的变量。
根本无法完成功能:)
一个更微妙的例子是isset
和empty
。虽然它们看起来像函数,但它们只有单独的函数是不可能的 - 它们不会生成“变量未定义”或“未定义的索引”通知。
答案 5 :(得分:0)
语言结构可以以多种方式形成,并具有返回值
print("asdf");
与print "asdf";
尽可能相同,并返回1.
echo("asdf");
等于echo "asdf;"
,但没有返回值。
die("asdf");
等于exit("asdf");
,也没有返回值。
答案 6 :(得分:0)
出于完整性考虑,语言构造是语言本身内置的任何指令,而功能是附加的代码块。
在某些情况下,语言可能选择构建特定功能或依赖单独的功能。
例如,PHP具有print
语言构造,该构造输出一个字符串。许多其他语言(例如 C )都没有内置它,而是将其实现为功能。采取一种或其他方法可能有技术原因,但有时更具有哲学意义-该功能应被视为核心功能还是附加功能。
出于实际目的,虽然函数遵循严格的后勤规则集,但语言构造却不遵循。有时,这是因为他们可能正在做某些可能会损害正常功能的事情。例如,isset(…)
就其目的而言,可能是指不存在的东西。函数根本无法很好地解决这个问题。
以下是语言构造的一些特征:
isset
)执行的功能无法实现;其他一些,例如Array(…)
可能会走这两种方式。Array(…)
构造可以写为[…]
。$a='print_r'; $a(…);
可以,但是$a='print'; $a(…);