4

其中include, include_once,requirerequire_once我总是只使用require_once. 许多第三方框架也只是使用require_once

任何人都可以描述一个必须使用另一个构造的真实场景吗?

4

3 回答 3

5

恕我直言,没有适合的真实场景,include原因include_once有两个:

  1. 您不太可能打算包含一个文件,同时您并不真正关心它是否包含(例如,如果文件不存在并且继续执行)。
  2. 即使是这种情况,include也会发出一个风格不好的警告(零警告代码是一件值得努力的事情)。大多数情况下,您可以通过类似的检查来防止这种情况发生is_file,但是您知道该文件确实存在,那为什么不require呢?

对于requirevs require_once:如果一个文件可以被多次合法地解析(例如一个 HTML 模板),则使用前者。如果它将代码带入您的应用程序(绝大多数情况下),请使用后者。

于 2012-11-13T12:19:28.563 回答
2

The require_once()语句与require()除了 PHP 将检查文件是否已被包含,如果是,则不再包含(要求)它相同。

require()函数与 相同include(),只是它处理错误的方式不同。如果发生错误,include() 函数会生成警告,但脚本会继续执行。require()生成一个致命错误,脚本将停止。

include/require和语句之间的唯一区别include_once/require_once是实际加载给定文件的次数。使用include_once/require_once语句时,无法多次加载或执行文件。如果尝试使用这两种方法之一加载文件两次,它将被忽略。因为在一个脚本中多次定义同一个函数是不可接受的,所以这些函数允许开发人员根据需要包含一个脚本,而不必检查它之前是否已加载。

<?php

    include ('library.inc');      
    $leap = is_leapyear(2003);
 

    require ('library.inc');     
    $leap = is_leapyear(2003);

?>

如果两个语句都允许当前脚本在单独的文件中执行代码,那么两者有什么区别?

有两个主要区别:

第一个是返回值的能力,第二个是在什么情况下加载请求的文件。使用include语句时,PHP 会延迟请求文件的实际加载,直到脚本到达执行该语句的点并用文件的内容include替换该语句。include相反,在语句的情况下,require无论require语句require(以及文件的内容)是否会在脚本的正常进程中执行,语句都会被请求文件的内容替换。

引用以上段落来自http://82.157.70.109/mirrorbooks/php5/067232511X/ch01lev1sec8.html

笔记

从外部文件返回值的能力仅限于 include 和include_once语句。require_once不能以这种方式使用require 和语句。

require给予Fatal errorinclude给予Warning

于 2012-11-13T12:07:56.603 回答
-1

如果找不到文件,include 构造将发出警告这是与require不同的行为,它将发出致命E_COMPILE_ERROR级别的错误。

同样的差异也适用于include_oncerequire_once

何时使用 include 和何时使用 require,在要求、包含和 require_once 之间的区别的答案中描述得非常好?

从我的角度来看,有两件事。

  1. 如果你有一些东西,这是绝对需要出现在你的应用程序中的,你应该使用require/require_once来包含这样的定义。这样,您将收到致命错误而不是警告,并且在开发过程中将简化查找有问题的代码。
  2. 如果您包含外部资源或可能缺少的东西,则应将其包含在include/include_once中,以便能够使用@运算符抑制可能的包含错误。
于 2012-11-13T12:12:40.670 回答