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 相关文章推荐
解决GD中文乱码问题
Feb 14 PHP
php 输出双引号&quot;与单引号'的方法
May 09 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
Jul 12 PHP
PHP中“简单工厂模式”实例代码讲解
Sep 04 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
Oct 10 PHP
ThinkPHP查询返回简单字段数组的方法
Aug 25 PHP
php+mysqli使用面向对象方式更新数据库实例
Jan 29 PHP
浅谈ThinkPHP中initialize和construct的区别
Apr 01 PHP
利用laravel+ajax实现文件上传功能方法示例
Aug 13 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
Jun 13 PHP
laravel与thinkphp之间的区别与优缺点
Mar 02 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性能优化 产生高度优化代码
2011/07/22 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
2012/01/10 PHP
php进程间通讯实例分析
2016/07/11 PHP
用JavaScript隐藏控件的方法
2009/09/21 Javascript
Javascript JSQL,SQL无处不在,
2010/05/05 Javascript
JavaScript等比例缩放图片控制超出范围的图片
2013/08/06 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
使用jspdf生成pdf报表
2015/07/03 Javascript
jQuery事件详解
2017/02/23 Javascript
Vue.js展示AJAX数据简单示例讲解
2017/03/29 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
浅谈React高阶组件
2018/03/28 Javascript
原生JS实现随机点名项目的实例代码
2019/04/30 Javascript
全网小程序接口请求封装实例代码
2020/11/06 Javascript
[18:16]sakonoko 2017年卡尔集锦
2018/02/06 DOTA
[01:02:55]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
[39:53]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.19
2020/11/19 DOTA
Python 连连看连接算法
2008/11/22 Python
Python的Django框架中的Context使用
2015/07/15 Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
2016/06/07 Python
python实现大转盘抽奖效果
2019/01/22 Python
使用Python实现跳帧截取视频帧
2019/05/31 Python
Python实现K折交叉验证法的方法步骤
2019/07/11 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
pytorch GAN生成对抗网络实例
2020/01/10 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
波兰电子产品购物网站:Vobis
2019/05/26 全球购物
俄罗斯厨房产品购物网站:COOK HOUSE
2021/03/15 全球购物
《日月潭》教学反思
2014/02/28 职场文书
高三励志标语
2014/06/05 职场文书
2014年检验科工作总结
2014/11/22 职场文书
事业单位工作人员年度考核个人总结
2015/02/12 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
小学一年级语文教学反思
2016/03/03 职场文书
MySQL数据库超时设置配置的方法实例
2021/10/15 MySQL