php使用include 和require引入文件的区别


Posted in PHP onFebruary 16, 2017

最近有小伙伴,提问了有关于require_once的有关问题,对于程序中遇到的问题,无聊难度大小,只要bug存在就还值得我们去探索,去解决。针对这个问题,我把include和require的详细用法进行归纳。(结合查阅资料和自己的理解,整合出来的)希望能给有需要的小伙伴一点帮助。

引入文件:

首先需要一个php文件:

<?php
class shao//类名必须和文件名相同!!!
{
  public $xxx="666";
}
$shili = new shao();
echo $shili->xxx;
?>

引用:

<?php
//引入文件
include "shao.php";//引用文件;只能引用一遍
//引用多个则费劲
//include_once("shao.php");//一次又一次
//也可以require ("shao.php");
?>

其中include与require的区别:

require:

执行到require()时,只会读取一次档案,故常放在程序开头,档案引入后PHP会将网页档重新编译,让引入档成为原先网页的一部分。

require() :无条件包含,如果文件不存在,会报出一个fatal error.脚本停止执行
require遇到错误时,直接报错并停止运行程序

include:

执行到include()时,每次皆会读取档案,故常用于流程控制的区段,如条件判断或循环中。
include() : 有条件包含,如果文件不存在,会给出一个 warning,但脚本会继续执行
include遇到错误时(引用的文件不存在),PHP只是报错,但程序会继续运行下去

 以下为补充:

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()会先检查目标文件的内容是不是在之前就已经导入过了,如果是的话,便不会再次重复导入同样的内容。
6. require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require。
7. require通常放在PHP程序的最前面,PHP程序在执行前,就会先读入require所指定引入的文件,使它变成PHP程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。
8. include一般是放在流程控制的处理部分中PHP程序网页在读到include的文件时,才将它读进来。这种方式可以把程序执行时的流程简单化。

推荐使用require_once()和include_once(),可以检测文件是否有重复包含。

自动加载:

被引用的php文件:

<?php
class shao//类名必须和文件名相同!!!
{
  public $xxx="666";
}

?>

自动加载:

<?php
function __autoload($asd)
{
  require $asd.".php";//可填地址查找
}
$shili = new shao();
echo $shili->xxx;
?>
PHP 相关文章推荐
php下使用SMTP发邮件的代码
Jan 10 PHP
PHP 编程的 5个良好习惯
Feb 20 PHP
php 生成WML页面方法详解
Aug 09 PHP
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
Mar 21 PHP
PHP调用Webservice实例代码
Jul 29 PHP
PHP数组及条件,循环语句学习
Nov 11 PHP
ThinkPHP查询返回简单字段数组的方法
Aug 25 PHP
smarty循环嵌套用法示例分析
Jul 19 PHP
PHP Oauth授权和本地加密实现方法
Aug 12 PHP
YII框架批量插入数据的方法
Mar 18 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
PHP常用函数之base64图片上传功能详解
Oct 21 PHP
Yii2实现UploadedFile上传文件示例
Feb 15 #PHP
使用PHPMailer发送邮件实例
Feb 15 #PHP
php使用gd2绘制基本图形示例(直线、圆、正方形)
Feb 15 #PHP
php使用GD2绘制几何图形示例
Feb 15 #PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
Feb 15 #PHP
php使用Jpgraph创建折线图效果示例
Feb 15 #PHP
php使用Jpgraph创建3D饼形图效果示例
Feb 15 #PHP
You might like
PHP模拟SQL Server的两个日期处理函数
2006/10/09 PHP
一个可以找出源代码中所有中文的工具
2006/10/25 PHP
PHP抽象类 介绍
2012/06/13 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
2016/07/25 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
Jquery下判断Id是否存在的代码
2011/01/06 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
jquery如何根据值设置默认的选中项
2014/03/17 Javascript
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
JavaScript自定义等待wait函数实例分析
2015/03/23 Javascript
微信小程序 天气预报开发实例代码源码
2017/01/20 Javascript
node.js 发布订阅模式的实例
2017/09/10 Javascript
webpack配置打包后图片路径出错的解决
2018/04/26 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
[03:36]2014DOTA2 TI小组赛综述 八强诞生进军钥匙球馆
2014/07/15 DOTA
[01:51]历届DOTA2国际邀请赛举办地回顾 TI9落地上海
2018/08/26 DOTA
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
2016/01/20 Python
详解Python命令行解析工具Argparse
2016/04/20 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
tensorflow模型保存、加载之变量重命名实例
2020/01/21 Python
python 30行代码实现蚂蚁森林自动偷能量
2021/02/08 Python
Python LMDB库的使用示例
2021/02/14 Python
大学生社团活动总结
2014/04/26 职场文书
会展策划与管理专业求职信
2014/06/09 职场文书
陈胜吴广起义口号
2014/06/20 职场文书
夫妻双方自愿离婚协议书
2014/10/24 职场文书
优秀员工推荐材料
2014/12/20 职场文书
2015年学校团委工作总结
2015/05/26 职场文书
周末问候语大全
2015/11/10 职场文书
2019感恩宣传标语!
2019/07/05 职场文书