【问题标题】:Is php's 'include' a function or a statement?php的'include'是一个函数还是一个语句?
【发布时间】:2025-12-05 11:55:02
【问题描述】:

网络上有很多这两种方法的例子。 php手册说“include()语句[...]”,这似乎是矛盾的——如果它是一个语句,它不应该没有括号吗?

这两项工作:

include('somefile.php');
include 'somefile.php;

所以我或其他人应该关心吗?

【问题讨论】:

  • 不,没有任何理由的人不应该在意。

标签: php include


【解决方案1】:

引用手册(我的重点)

由于 include() 是一种特殊的语言结构,因此不需要在其参数周围使用括号。

这些也称为“特殊形式”,包括echoreturn 语句等内容。请注意,虽然这些都不是函数,但您仍然可以谈论表达式和语句,区别在于前者有值,而后者没有。由于includeinclude_oncerequirerequire_once 都返回一个值(如果包含成功则为TRUE),它们可以在表达式中使用。按照这种推理,“include 语句”是不正确的,尽管 includes 几乎总是用作语句。

【讨论】:

  • 如果它们不是函数,它们怎么能“返回”一些东西呢?
  • @Marc.2377 与 PHP 中的大多数表达式可以返回某些内容的方式相同(例如,表达式 1+2 将返回一个值 3,并且可以将其分配给变量 $x = 1+2 );返回值不限于函数
  • 感谢您的澄清。我希望手册能像这个答案一样技术性和完整。
【解决方案2】:

include 是一个声明: 如下例解释

// won't work, evaluated as include(('vars.php') == 'OK'), i.e. include('')
if (include('vars.php') == 'OK') {
    echo 'OK';
}

// works
if ((include 'vars.php') == 'OK') {
    echo 'OK';
}

【讨论】:

  • 这真的不是一个负面的例子,因为在 include 周围加上括号并不排除在参数周围加上括号。 if ( (include('vars.php')) == 'OK' ) { echo 'OK'; }.
【解决方案3】:

括号是函数的参数。 使用include,您可以将其用作函数或 php 中的语句。

因为 include() 是一种特殊的语言结构,所以括号不是 需要围绕它的论点。

此处的文档:http://php.net/manual/en/function.include.php

echo相同的概念,引用自PHP手册here

echo 实际上不是一个函数(它是一种语言结构),所以你 不是必须使用括号。回声(不像其他一些 语言结构)的行为不像函数,所以它不能 总是在函数的上下文中使用。

【讨论】:

    【解决方案4】:

    括号中的单个值会根据值本身进行计算,因此括号本身没有任何影响。

    【讨论】:

      【解决方案5】:

      两者兼而有之。在 PHP 文档的许多领域中,所有内容都称为语句。示例(来自控制结构)-“语句可以是赋值、函数调用、循环、条件语句,甚至是什么都不做的语句(空语句)。”

      语句和函数之间的区别在于各个语言的语义。因此,由 PHP 维护人员来明确定义它,或者让它保持模棱两可。

      【讨论】:

        【解决方案6】:

        includerequireechoprint 和少数其他关键字本身是语言结构,而不是函数调用,并且不需要括号。然而,有些人喜欢假装他们是函数调用并使用括号。它们是相同的。

        【讨论】:

          【解决方案7】:

          对于 echo,请始终使用 echo "test"

          <?php 
          // this will give you error
          echo ("test","test");
          
          //that will work fine
          echo "test","test";
          ?>
          

          【讨论】:

            【解决方案8】:

            只有一个参数的语句,也可以有括号,例如:

            echo ('hello world'); 
            

            【讨论】:

              【解决方案9】:

              我相信唯一的区别是你想做什么。

              比如这两个

              echo 'Hello World';
              echo ('Hello World');
              

              ...都打印 Hello World

              这只是你想做的,你觉得最舒服的,如果你像我一样,你想让你的脚本看起来漂亮:D

              【讨论】: