0

include和require、require_once的区别详解

  • incluce在用到时加载
  • require在一开始就加载
  • _once后缀表示已加载的不加载

      先来单独解释一下这几个语句的作用:

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



      require 的使用方法如 require("MyRequireFile.php"); 。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。



      include 使用方法如 include("MyIncludeFile.php"); 。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。



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



     

      他们两个的用途是完全一样的,不一定非得哪个放在最前面哪个放在中间。

      区别在于:

      1.执行方式不一样

      include()是有条件包含函数,二require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require。 

      2. 错误处理方式不一样

      require一个文件存在错误的话,那么程序就会中断执行了,并显示致命错误 

      include一个文件存在错误的话,那么程序不会中端,而是继续执行,并显示一个警告错误。 

      这也是两者最根本的区别。

      3.require没有返回值而include有返回值,这也是一点小小的区别



      举个栗子:

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



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



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

//include-test.php


<?php
include 'not-exists.php';
echo 'abc';
?>
 

//require-test.php

<?php
require 'not-exists.php';
echo 'xyz';
?>

  浏览http://127.0.0.1/include-test.php,因为没有找到not-exists.php文件,我们看到了报错信息,同时,报错信息的下边输出了xyz,你看到的可能是类似下边的情况:



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



以上代码测试环境 PhpStorm 2016,  PHP 5.6.16,操作系统MAC OS10.12.4