使用include(),include_once()和require()构造的实际场景

时间:2012-11-13 12:05:08

标签: php require-once

includeinclude_oncerequirerequire_once中,我总是使用require_once。许多第三方框架也只使用require_once

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

3 个答案:

答案 0 :(得分:5)

恕我直言,由于两个原因,没有适合includeinclude_once的真实场景:

  1. 您的意图是不太可能包含文件,同时您并不真正关心它是否包含在内(例如,如果该文件不存在并且继续执行)。
  2. 即使是这种情况,include也会发出一个不好的警告(零警告代码是一件好事)。您可以使用is_file之类的支票来阻止这种情况,但是您知道该文件确实存在,那么为什么不require呢?
  3. 对于require vs require_once:如果文件可以合法地被解析多次(例如HTML模板),请使用前者。如果它在您的应用程序中引入代码(绝大多数情况)使用后者。

答案 1 :(得分:2)

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

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

include/requireinclude_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和require_once语句不能以这种方式使用。

require提供Fatal errorinclude提供Warning

答案 2 :(得分:-1)

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

同样的差异也适用于include_oncerequire_once

当使用include和使用require时,在Difference between require, include and require_once?

的答案中描述得非常好

从我的观点来看,有两件事。

  1. 如果您的某些内容绝对需要在您的应用程序中出现,则应使用require / require_once来包含此类定义。这样你就会得到致命错误而不是警告,并且在开发期间会简化查找有问题的代码。
  2. 如果您要包含外部资源或可能缺少的内容,则应将其include / include_once包含在其中,以便能够使用@运算符抑制可能的包含错误