PHP中include和require的区别详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP中include和require的区别详解相关的知识,希望对你有一定的参考价值。

1、概要

   require()语句的性能与include()相类似,都是包括并运行指定文件。不同之处在于:对include()语句来说,在执行文件时每次都要进行读取和评估;而对于require()来说,文件只处理一次(实际上,文件内容替换require()语句)。这就意味着如果可能执行多次的代码,则使用require()效率比较高。另外一方面,如果每次执行代码时是读取不同的文件,或者有通过一组文件迭代的循环,就使用include()语句。

  require的使用方法如:require("myfile.php"),这个语句通常放在PHP脚本程序的最前面。PHP程序在执行前,就会先读入require()语句所引入的文件,使它变成PHP脚本文件的一部分。include使用方法和require一样如:include("myfile.php"),而这个语句一般是放在流程控制的处理区段中。PHP脚本文件在读到include()语句时,才将它包含的文件读取进来。这种方式,可以把程式执行时的流程简单化。

incluce在用到时加载

require在一开始就加载

_once后缀表示已加载的不加载

  PHP系统在加载PHP程序时有一个伪编译过程,可使程序运行速度加快。但incluce的文档仍为解释执行。include的文件中出错了,主程序继续往下执行,require的文件出错了,主程序也停了,所以包含的文件出错对系统影响不大的话(如界面文件)就用include,否则用require。

  require()和include()语句是语言结构,不是真正的函数,可以像php中其他的语言结构一样,例如echo()可以使用
echo("ab")形式,也可以使用echo
"abc"形式输出字符串abc。require()和include()语句也可以不加圆括号而直接加参数。

  include_once()和require_once()语句也是在脚本执行期间包括运行指定文件。此行为和include()语句及
require()类似,使用方法也一样。唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。这两个语句应该用于在脚本执行期间,同一个文件有
可能被包括超过一次的情况下,确保它只被包括一次,以避免函数重定义以及变量重新赋值等问题。

2、详情

2.1 报错

  include引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码。

  require引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码。

  用例子来说话,写两个php文件,名字为test-include.php和test-require.php,注意相同的目录中,不要存在一个名字是test-nothing.php的文件。

test-include.php

<?php

include 'test-nothing.php';

echo 'abc';

?>

test-require.php

<?php

require 'test-nothing.php';

echo 'abc';

?>

  浏览http://localhost/test-include.php,因为没有找到test-nothing.php文件,我们看到了报错信息,同时,报错信息的下边显示了abc,你看到的可能是类似下边的情况:

Warning: include(test-nothing.php) [function.include]: failed to open
stream: No such file or directory in D:\www\test-include.php on line 2

Warning: include()
[function.include]: Failed opening 'test-nothing.php' for inclusion
(include_path='.;C:\php5\pear') in D:\www\test-include.php on line 2

abc

浏览http://localhost/test-require.php,因为没有找到test-nothing.php文件,我们看到了报错信息,但是,报错信息的下边没有显示abc,你看到的可能是类似下边的情况:

Warning: require(test-nothing.php) [function.require]: failed to open
stream: No such file or directory in D:\www\test-require.php on line 2

Fatal error: require()
[function.require]: Failed opening required 'test-nothing'
(include_path='.;C:\php5\pear') in D:\www\test-require.php on line 2

2.2 条件引用

  include()与require()的功能相同,用法上却有一些不同,include()是有条件包含函数,而require()则是无条件包含函数。

  例如下面例子,如果变量$somg为真,则将包含文件somefile.php:

if($some)

  include 'somefile.php';



  但无论$some取何值,下面的代码将把文件somefile.php包含进文件里:

if($something)

  require 'somefile.php';



  下面的例子充分说明了这两个函数之间的不同:

$i = 1;

while ($i < 3)

  require "somefile.$i.php";

  $i++;



  可以从以上这段代码中看出,每一次循环的时候,程序都将把同一个文件包含进去,很显然这不是我们想要的,可以看出这段代码希望在每次循环时,将不同的文件包含进来,如果要完成这个功能,只能使用函数include():

$i = 1;

while ($i < 3)

  include "somefile.$i.php";

  $i++;



2.3 文件引用方式

  include()执行时需要引用的文件每次都要进行读取和评估,require()执行时需要引用的文件只处理一次(实际上执行时需要引用的
文件内容替换了require()语句)可以看出若有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高,若每次执行代码
时相读取不同的文件或者有通过一组文件叠代的循环,就使用include(),可以给想要包括的文件名设置变量,当参数为
include()时使用这个变量。
参考技术A 相同点:include和require 都能把另外一个文件包含到当前文件中。 不同点:使用include时,当包含的文件不存在时,系统会报出警告级别的错误,程序会继续往下执行。 使用require包含文件时,当包含的文件不存在时,系统会先报出警告级别的错误,接着又报一个致命级别的错误。程序将终止执行。 require能让php的程序得到更高的效率,在同一php文件中解释过一次后,不会再解释第二次。而include却会重复的解释包含的文件。所以当php网页中使用循环或条件语句引入
文件时,"require"则不会做任何的改变,当出现这种情况,必须使用"include"命令来引入文件。本回答被提问者采纳

PHP 中 include 和 require 的区别详解

前言

在做程序设计的时候避免不了要去引用外部文件,在 PHP 中引入文件的方式有很多种,这里详细说一下 include ;require ;include_oncerequire_once

require () 语句的性能与 include () 相类似,都是包括并运行指定文件。除了处理失败的方式不同之外。require
在出错时产生 E_COMPILE_ERROR 级别的错误,终止脚本运行;而 include 只产生警告(E_WARNING),脚本会继续运行。

1.include 和 require 都是语句结构(并不是函数)

在 php 官网手册上是划分到了流程控制,这两个语句结构不是函数。

详情可参考 http://php.net/manual/zh/function.include.php

所以,它可以不加圆括号,直接加引号来包含文件。我习惯不加圆括号。

  • include ‘01_var.php‘;
  • 或者
  • include(‘01_var.php‘);
  • 或者
  • require ‘01_var.php‘;
  • 或者
  • require(‘01_var.php‘);

2. 对于处理失败的方式不同(最主要的区别)

对于引入的文件找不到情况下。(这里确保当前文件夹下面不存在 no.php

在 01_include_require 文件下编写如下代码:

  • include ‘no.php‘;
  • echo ‘End!‘;//会输出

include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。

  • require ‘no.php‘;
  • echo ‘End!‘;//不会输出

require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行。

3. 对 include 和 require 引入文件的实质

  • 对 include () 语句来说,在执行文件时每次都要进行读取和评估;
  • 对于 require () 来说,文件只处理一次(实际上,文件内容替换 require () 语句)这就意味着如果可能执行多次的代码,则使用
    require () 效率比较高。
  • 另外一方面,如果每次执行代码时是读取不同的文件,或者有通过一组文件迭代的循环,就使用 include () 语句。

4.include_once 和 require_once 的作用

使用方法与不加后缀一样,加上_once 后缀 意味着如果该文件中的代码已经被包括进来了,就不会再次包括。因为有些情况下,在脚本执行期间,同一个文件有可能包含超过一次的情况下,为了确保只包含一次,避免函数重定义,或者是变量的重新赋值的问题。

  • include_once ‘01_var.php‘;
  • require_once ‘01_var.php‘;

使用场景

    1. 如果您希望继续执行,并向用户输出结果,即使包含文件已丢失,那么请使用 include。
    2. 在框架复杂的 php 应用程序编程中,请始终使用 require
      向执行流引用关键文件。这有助于提高应用程序的安全性和完整性,在某个关键文件意外丢失的情况下。包含文件省去了大量的工作。例如在 thinkphp 框架 index 入口引入核心代码就是利用 require 引入的。
    3. require 通常放在 php 脚本程序最前面,php 再执行程序前,就会先读取 require 语句引入的文件,使之成为 php 脚本文件的一部分。
    4. include 通常用在流程控制的处理部分中,php 脚本在读到 include
      的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。

以上是关于PHP中include和require的区别详解的主要内容,如果未能解决你的问题,请参考以下文章

PHP 中 include 和 require 的区别详解

2016/3/27 PHP中include和require的区别详解

PHP中include和require的区别详解

PHP中include和require的区别详解

php 中 include 与 require 的区别

PHP4个载入语句的区别