【转载】PHP中require(),include(),require_once()和include_once()区别

关于这方面的知识,这篇文章讲的较全:

http://www.jb51.net/article/22467.htm

require 的使用方法如 require("MyRequireFile.php"); 。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,
使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。 include 使用方法如 include(
"MyIncludeFile.php"); 。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。
这种方式,可以把程序执行时的流程简单化。 他们两个的用途是完全一样的,不一定非得哪个放在最前面哪个放在中间。他们最根本的区别在于错误处理的方式不一样。 require一个文件存在错误的话,那么程序就会中断执行了,并显示致命错误 include一个文件存在错误的话,那么程序不会中端,而是继续执行,并显示一个警告错误。 以下为补充:
1. include有返回值,而require没有。 2. include()包括并运行指定文件 在处理失败时include() 产生一个警告,被导入的程序代码都会被执行,
而且这些程序在执行的时候会拥有和源文件中呼叫到include()语句的位置相同的变量范围。你可以导入同一个服务器中的静态页面。
3. include_once()的作用和include()是几乎相同的 唯一的差别在于include_once()会先检查要导入的档案是不是已经在该程序中的其它地方被导入过了,如果有的话就不会再次重复导入
(这项功能有时候是很重要的,比方说要导入的里面宣告了一些你自行定义好的函数,那么如果在同一个程序重复导入这个文件,在第二次导入的时候便会发生错误讯息,
因为PHP不允许相同名称的函数被重复宣告第二次)。
4. require()会将目标文件的内容读入,并且把自己本身代换成这些读入的内容 在处理失败时require() 则导致一个致命错。 这个读入并且代换的动作是在PHP引擎编译你的程序代码的时候发生的,而不是发生在PHP引擎开始执行编译好的程序代码的时候
(PHP
3.0引擎的工作方式是编译一行执行一行,但是到了PHP 4.0以后就有所改变了,PHP 4.0是先把整个程序代码全部编译完成后,
再将这些编译好的程序代码一次执行完毕,在编译的过程中不会执行任何程序代码)。require()通常来导入静态的内容,而include()则适合用导入动态的程序代码。
5. 如同include_once(),require_once()会先检查目标文件的内容是不是在之前就已经导入过了,如果是的话,便不会再次重复导入同样的内容。 5. require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require。 7. require通常放在PHP程序的最前面,PHP程序在执行前,就会先读入require所指定引入的文件,使它变成PHP程序网页的一部份。
常用的函数,亦可以这个方法将它引入网页中。
8. include一般是放在流程控制的处理部分中PHP程序网页在读到include的文件时,才将它读进来。这种方式可以把程序执行时的流程简单化。

还有这篇文章也有讲到上面4个函数:https://liuzhichao.com/p/1743.html

首先include和require都是引入指定的文件。_once表示只引入一次,即之前已经引入过的不再引入。

例如1.php中有句简单的打印 echo '1 </br> ' 下面的程序运行的结果:

 <?php
include '1.php';
require '1.php';
include_once '1.php';
require_once '1.php';

将是

1
1

而不是
1
1
1
1

如果将_once引入的语句放在include和require上面,结果将是

1
1
1
1

include与require的区别

1、加载失败的处理方式不同

include与require除了在处理引入文件的方式不同外,最大的区别就是:
include在引入不存文件时产生一个警告且脚本还会继续执行,
require则会导致一个致命性错误且脚本停止执行。

<?php
  include 'hello.php';
  echo 'world';
?>

如果hello.php不存在,echo ‘world’这句是可以继续执行的。

<?php
  require 'hello.php';
  echo 'world';
?>

如果hello.php不存在,echo ‘hello’这句是不会执行的,到require时就停止了。

 

2、include()是有条件包含函数,而 require()则是无条件包含函数。

if(FALSE){ 
    include 'file.php'; //file.php不会被引入 
} 
if(FALSE){ 
    require 'file.php'; //file.php将会被引入

3、文件引用方式及返回值

include有返回值,而require没有

$retVal = include(’somefile.php’);
if(!empty($retVal)){
  echo "文件包含成功";
}else{
  echo "文件包含失败";
}

include()执行时需要引用的文件每次都要进行读取和评估,
require()执行时需要引用的文件只处理一次(实际上执行时需要引用的文件内容替换了require()语句)

可以看出若有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高,
若每次执行代码时相读取不同的文件或者有通过一组文件叠代的循环,就使用include(),

require通常使用方法,这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。

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

另外关于include和require后面是否加括号的问题

理论上来说:include和require后面加不加括号对执行结果没有区别,但是加上括号效率较低,所以后面能不加括号就不加括号。

原文地址:https://www.cnblogs.com/charlesblc/p/5970022.html