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 相关文章推荐
PHP4 与 MySQL 数据库操作函数详解
Oct 09 PHP
discuz 首页四格:最新话题+最新回复+热门话题+精华文章插件
Aug 19 PHP
C# Assembly类访问程序集信息
Jun 13 PHP
PHP 日期时间函数的高级应用技巧
Oct 10 PHP
php下删除一篇文章生成的多个静态页面
Aug 08 PHP
php中inlcude()性能对比详解
Sep 16 PHP
php中call_user_func函数使用注意事项
Nov 21 PHP
php实现将上传word文件转为html的方法
Jun 03 PHP
php开发微信支付获取用户地址
Oct 04 PHP
php基于闭包实现函数的自调用(递归)实例分析
Nov 11 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
Dec 12 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
关于PHP 如何用 curl 读取 HTTP chunked 数据
2016/02/26 PHP
CI框架中redis缓存相关操作文件示例代码
2016/05/17 PHP
PHP实现的猴王算法(猴子选大王)示例
2018/04/30 PHP
基于Jquery插件开发之图片放大镜效果(仿淘宝)
2011/11/19 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
2014/10/16 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
2016/10/10 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
原生JS+Canvas实现五子棋游戏
2020/05/28 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
浅谈Koa服务限流方法实践
2017/10/23 Javascript
解决vue中使用swiper插件问题及swiper在vue中的用法
2018/04/04 Javascript
ES6 中可以提升幸福度的小功能
2018/08/06 Javascript
JSON是什么?有哪些优点?JSON和XML的区别?
2019/04/29 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
探寻python多线程ctrl+c退出问题解决方案
2014/10/23 Python
python3实现读取chrome浏览器cookie
2016/06/19 Python
Python 加密的实例详解
2017/10/09 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
pygame游戏之旅 载入小车图片、更新窗口
2018/11/20 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
Django中信号signals的简单使用方法
2019/07/04 Python
python监控nginx端口和进程状态
2019/09/06 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
python中property和setter装饰器用法
2019/12/19 Python
详解python中各种文件打开模式
2020/01/19 Python
scrapy-splash简单使用详解
2021/02/21 Python
纯CSS3+DIV实现小三角形边框效果的示例代码
2020/08/03 HTML / CSS
洲际酒店集团美国官网:IHG美国
2017/11/16 全球购物
eBay瑞士购物网站:eBay.ch
2018/12/24 全球购物
英国领先的豪华时尚家居网上商店:Amara
2019/08/12 全球购物
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
毕业生就业协议书
2014/04/11 职场文书
英语课前三分钟演讲稿(6篇)
2014/09/13 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书