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

时间:2010-07-15 09:41:46

标签: php

我不断发表如下声明:

  • “echo是一种语言结构,但是 print是一个函数,因此有一个 返回值“
  • “die是一种语言结构”

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

7 个答案:

答案 0 :(得分:20)

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

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

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()构造中定义的变量。

根本无法完成功能:)

一个更微妙的例子是issetempty。虽然它们看起来像函数,但它们只有单独的函数是不可能的 - 它们不会生成“变量未定义”或“未定义的索引”通知。

答案 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(…);