PHP包含文件函数include、include_once、require、require_once区别总结


Posted in PHP onApril 05, 2014

例如下面的代码:

include('hello.php'); 
echo 'include test final!';//include报错,但是会继续执行,显示:include test final! 
require('hello.php'); 
echo 'require test final!';//require报错,停止代码的执行。

一句话总结:
1.include() 产生一个警告
2.require()  则导致一个致命错误

换句话说,如果你想在丢失文件时停止处理页面,那就别犹豫了,用  require()  吧。include()  就不是这样,脚本会继续运行。同时也要确认设置了合适的include_path。
就是说再解析程序时即读取require的文件,而不是解析后,如果不能读取到被require的文件,就不能进行下一步动作。所以,不被正确包含就会导致程序的文件,用require比较好。可能效率上也略微高点。

注意:require() 无论如何都会包含文件,而include() 可以有选择地包含:

<?php 
 if(FALSE){ 
   require('x.php');
 } 
 if(FALSE){ 
   include('s.php');
 } 
?>

上面的代码中:x.php  一定会被包含,而  s.php  一定不会被包含。

二种方式提供不同的使用弹性:
require 的使用方法如 require("MyRequireFile.php"); 。这个函式通常放在 PHP 程式的最前面,PHP 程式在执行前,就会先读入 require 所指定引入的档案,使它变成 PHP 程式网页的一部份。
include 使用方法如 include("MyIncludeFile.php"); 。这个函式一般是放在流程控制的处理区段中。PHP 程式网页在读到 include 的档案时,才将它读进来。这种方式,可以把程式执行时的流程简单化。

一、使用语法和简介

1、include()
语法:include(/path/to/filename)
include()语句将在其被调用的位置处包含一个文件。包含一个文件与在该语句所在位置复制制定文件的数据具有相同内容的效果。
使用include()时可以忽略括号。

可以根据条件来执行include()语句。在条件语句中使用include()有个怪现象,它必须包围在语句块大括号中,或者用其他语句包围符括起来。

2、include_once()
语法:include_once(filename)

include_once() 语句在脚本执行期间包含并运行指定文件。此行为和 include() 语句类似,唯一区别是include_once()会先判断一下这个文件在之前是否已经被包含过,如已经包含,则忽略本次包含。
include_once() 应该用于嵌套包含的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。

小结:include_once()函数的作用与include相同,不过它会首先验证是否已经包含了该文件。如果已经包含,则不再执行include_once。否则,则必须包含该文件。除了这一点与include完全相同。

3、require()
语法:require(filename)
require()在很大程度上与include相同,都是将一个模板文件包含到require调用坐在的位置。
require和include之间有两点重要的区别。首先,无论require的位置如何,制定文件都将包含到出现require的脚本中。例如,即使require放在计算结果为假的if语句中,依然会包含指定文件。
第二个重要的区别是:require出错时,脚本将停止运行,而在使用include的情况下,脚本将继续执行。

4、require_once()
语法:require_once(filename)
require_once() 语句在脚本执行期间包含并运行指定文件。此行为和 require() 语句类似,唯一区别是require_once()会先判断一下这个文件在之前是否已经被包含过,如已经包含,则忽略本次包含。
require_once() 应该用于嵌套包含的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。

小结:随着网站越来越大,可能会出现重复包含某些文件。这也许不是问题,但又是修改了所包含文件的变量后,却由于后面再次包含原来的文件而被覆盖,可能不希望出现这种情况。还可能出现另一个问题,即所包含文件中函数名的冲突。使用require_once就可以解决这些问题。
require_once函数确保文件只包含一次。在遇到require_once后,后面再试图包含相同的文件时将被忽略。

二、区别总结

1、include()与require()语句区别。
两者区别:这两种结构除了在如何处理失败之外完全一样。
include() 产生一个警告,脚本会继续运行。
require() 则导致一个致命错误,脚本会停止运行。

换句话说,如果想在遇到丢失文件或遇到错误时停止处理页面就用 require()。如果想在遇到错误时继续处理页面就用 include()。
注意在 PHP 4.3.5 之前,包含文件中的语法错误不会导致程序停止,但从此版本之后会。

2、include_once()、require_once()与include()、require()的区别
include_once()和require_once()一样,应该用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。这就是include_once()和require_once()与include() 和require()的主要区别。

三、需要注意的问题

1.路径问题
特别是嵌套包含的时候,一定得注意包含文件的路径。
比如 A文件包含了B文件,B文件包含了C文件,A,B,C文件都不在同一个文件夹下,这个时候往往很容易出错误。
解决方案:可以使用 dirname(__FILE__) 语句,这句的意思是获得当前脚本的绝对路径。如:require_once(dirname(__FILE__).'/config.php');

2.效率问题
include_once(),require_once(),与include(),require()比较,效率要低一些,因为他们至少得先判断一下这个文件是否已包含。这一问题在PHP5版本有很大改进,不过效率还是有差别。

PHP 相关文章推荐
PHP 服务器配置(使用Apache及IIS两种方法)
Jun 01 PHP
一些被忽视的PHP函数(简单整理)
Apr 30 PHP
php安全开发 添加随机字符串验证,防止伪造跨站请求
Feb 14 PHP
php 购物车完整实现代码
Jun 05 PHP
PHP @ at 记号的作用示例介绍
Oct 10 PHP
ThinkPHP表单数据智能写入create方法实例分析
Sep 27 PHP
解决PHP里大量数据循环时内存耗尽的方法
Oct 10 PHP
PHP 微信支付类 demo
Nov 30 PHP
PHP身份证校验码计算方法
Aug 10 PHP
php实现mysql连接池效果实现代码
Jan 25 PHP
centos7上编译安装php7以php-fpm方式连接apache
Nov 08 PHP
PHP echo()函数讲解
Feb 15 PHP
PHP6 中可能会出现的新特性预览
Apr 04 #PHP
php实现水仙花数示例分享
Apr 03 #PHP
PHP抓取、分析国内视频网站的视频信息工具类
Apr 02 #PHP
php 字符串中的\n换行符无效、不能换行的解决方法
Apr 02 #PHP
php警告Creating default object from empty value 问题的解决方法
Apr 02 #PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
Apr 01 #PHP
用PHP来计算某个目录大小的方法
Apr 01 #PHP
You might like
广播爱好者需要了解的天线知识
2021/03/01 无线电
用PHP连mysql和oracle数据库性能比较
2006/10/09 PHP
PHP中的正则表达式函数介绍
2012/02/27 PHP
基于递归实现的php树形菜单代码
2014/11/19 PHP
PHP四种基本排序算法示例
2015/04/09 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
解决Extjs 4 Panel作为Window组件的子组件时出现双重边框问题
2013/01/11 Javascript
Javascript Throttle &amp; Debounce应用介绍
2013/03/19 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
Jquery简单实现GridView行高亮的方法
2015/06/15 Javascript
探讨JavaScript中的Rest参数和参数默认值
2015/07/29 Javascript
基于JavaScript实现生成名片、链接等二维码
2015/09/20 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
javascript函数的四种调用模式
2017/01/08 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
Vue DevTools调试工具的使用
2017/12/05 Javascript
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
js中async函数结合promise的小案例浅析
2019/04/14 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
Python实现CET查分的方法
2015/03/10 Python
将tensorflow的ckpt模型存储为npy的实例
2018/07/09 Python
python实现求特征选择的信息增益
2018/12/18 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
python3.6+django2.0+mysql搭建网站过程详解
2019/07/24 Python
python读取raw binary图片并提取统计信息的实例
2020/01/09 Python
Python CategoricalDtype自定义排序实现原理解析
2020/09/11 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
韩国保养品、日本药妆购物网:小三美日
2018/12/30 全球购物
REN Clean Skincare官网:英国本土有机护肤品牌
2019/02/23 全球购物
如何打印出当前源文件的文件名以及源文件的当前行号
2015/04/05 面试题
房地产销售员的自我评价分享
2013/12/04 职场文书
毕业生找工作自荐书
2014/06/30 职场文书
《唯一的听众》教学反思
2016/02/18 职场文书
Python借助with语句实现代码段只执行有限次
2022/03/23 Python