php四种文件加载语句
https://mp.weixin.qq.com/s/Wsn4grDRxVIgMfu__E_oWQ
1、include
2、require
3、include_once
4、require_once
方法详解:
include语句包含并运行指定文件。require和include几乎完全一样,除了处理失败的方式不同之外。require在出错时产生E_COMPILE_ERROR(编译致命错误 64 编译时致命性错。这就像由Zend脚本引擎生成了一个E_ERROR。) 级别的错误。换句话说将导致脚本中止而include只产生警告(E_WARNING),脚本会继续运行。include_once语句在脚本执行期间包含并运行指定文件。此行为和include语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次。可以用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。require_once语句和require语句完全相同,唯一区别是PHP会检查该文件是否已经被包含过,如果是则不会再次包含。
总结:
include和require语句都是包含并运行指定文件,不同的是处理失败的方式不同,所以一般 require 用于加载重要文件,比如加载框架的引导文件,如果出错将终止程序,include一般用于加载配置文件或者第三方扩展库等,比如composer就是用的include加载文件的。include_once和require_once语句与include和require语句的不同就是,如果该文件已经包含过就不会再次包含了,这在避免文件重复加载,函数重定义,变量重新赋值等问题上有用,但是一定程度上会有性能损耗问题,毕竟需要检查是否加载过。所以一般确定的情况下会优先使用include和require,而不是include_once和require_once语句。
实验
扩展知识:
包含文件的语句会受php.ini 和 include_path(;include_path = ".:/php/includes")配置项影响,相关函数:
ini_set()- 为一个配置选项设置值set_include_path- 设置当前的include_path配置选项get_include_path()- 获取当前的include_path配置选项restore_include_path()- 还原include_path配置选项的值
直接引入(包含)文件默认是以上面set_include_path设置的目录为环境目录,环境目录找不到再从当前目录找
/ 表示服务器根目录,linux上面直接表示磁盘根目录,Windows下面表示某个磁盘根目录例如D:\\,
realpath()可以返回绝对路径。./ 表示当前运行文件的同级目录(入口),而不是当前脚本所在的目录(include 语句所在脚本文件的目录)
如果以相对于当前脚本文件引用文件请用__DIR__常量
注意:第一种情况,请小心了!这个一般表示从当前目录找,但是什么是当前目录呢?这个不同情况是不同的,它会先把当前运行文件的目录当成当前目录,如果找不到,再把当前脚本所在的目录当成当前目录,从当前脚本所在目录开始找,如果还找不到就报错,引入文件不存在。
所以如果意图清楚,最好是使用最后两种方式引入文件,这样能减少不必要的麻烦,另外使用绝对路径比使用相对路径加载文件性能更高,这样能避免系统去解析相对路径而耗费一些时间。
当前运行文件,当前脚本,请注意仔细理解它们的差别,前者作为入口运行,后者则被脚本通过引用的方式调用。魔术常亮\__FILE\__,\__DIR\__ 就是后者的文件名(包含完整的绝对路径)和目录。
关于路径的其他引申
PHP脚本这种文件相互引用包含的关系可和网页中静态文件css中的../路径不同,css中的路径之和所在css文件url路径相关,和网页没有半毛钱关系,网页只是加载它而已,但是如果css中使用/那情况就不同了,一般/为根域名,再说一遍,静态文件中除了/其他的路径都是相对于当前静态文件的,和网页地址没有关系。网页中的./和/则是相对于当前url路径(对于pathinfo也没有关系,不会受影响,认不出是假目录的)和根域。
还可以通过注册自动加载方法来实现自动加载,框架大部分都实现了自动加载,不然手动写包含语句不利于维护,太麻烦。
php四种文件加载语句的更多相关文章
- 13)PHP,文件加载(include和require)
有四种文件加载的语法形式(注意,不是函数): include, include_once, require, require_once; 他们的本质是一样的,都是用于加载/引入/包含/载入一个外部 ...
- 小程序页面的四种文件(JSON、WXML、WXSS、JS)加载顺序
一个小程序页面由四种文件组成: 1)json 页面配置文件 2)js 页面逻辑文件(必需) 3)wxml 页面结构文件(必需) 4)wxss 页面样式文件 这四个文件的加载顺序: 第一步: 加载页面j ...
- 插件化框架解读之so 文件加载机制(四)
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 提问 本文的结论是跟着 System.loadlibrary() ...
- 两种动态加载JavaScript文件的方法
两种动态加载JavaScript文件的方法 第一种便是利用ajax方式,第二种是,动静创建一个script标签,配置其src属性,经过把script标签拔出到页面head来加载js,感乐趣的网友可以看 ...
- 软件光栅器实现(四、OBJ文件加载)
本节介绍软件光栅器的OBJ和MTL文件加载,转载请注明出处. 在管线的应用程序阶段,我们需要设置光栅器所渲染的模型数据.这些模型数据包括模型顶点的坐标.纹理.法线和材质等等,可以由我们手动编写,也可以 ...
- php基础知识(3)(文件加载include)
文件加载 综述: 有4个文件加载的语法形式(注意,不是函数): include, include_once, require, require_once; 他们的本质是一样的,都是用于加载/引入/ ...
- 文件加载---理解一个project的第一步
当我最开始写php的时候,总是担心这个问题:我在这儿new的一个class能加载到对应的类文件吗?毕竟一运行就报Fatal Error,什么**文件没找到,类无法实例化等等是一种很“低级”的错误,怕别 ...
- *.pro、*.pri、*.prf、*.prl等四种文件
尽管每次和cmake对比起来,我们总是说 qmake 简单.功能少.但是qmake仍然是一个非常复杂的东西,我想大多人应该和我一样吧: 不是太清楚CONFIG等变量到底如何起作用的 用过的qmak ...
- [QT]简单介绍一下 *.pro、*.pri、*.prf、*.prl等四种文件
转自:http://blog.csdn.net/dbzhang800/article/details/6348432 简单介绍一下 *.pro.*.pri.*.prf.*.prl等四种文件:干嘛用的, ...
随机推荐
- duilib教程之duilib入门简明教程13.复杂控件介绍
首先将本节要介绍的控件全部拖到界面上,并调整好位置,如图: 然后将Name属性改成其他名字, 不能是[控件名+UI+数字]这种,因为这是DuiDesigner默认的名字,它不会实际写 ...
- sudo: /etc/sudoers is world writable|给用户添加权限报错
给用户添加权限时候出现:sudo: /etc/sudoers is world writable| sudo: /etc/sudoers is world writable解决方式: pkexec c ...
- (转)I帧,P帧,B帧 .
转:http://blog.csdn.net/abcjennifer/article/details/6577934 视频压缩中,每帧代表一幅静止的图像.而在实际压缩时,会采取各种算法减少数据的容量, ...
- 同步异步,异步回调,线程队列,线程时间Event
同步异步-阻塞非阻塞 阻塞-非阻塞 指的是程序的运行状态 阻塞:当程序执行过程中遇到了IO操作,在执行IO操作时,程序无法继续执行其他代码,称为阻塞. 非阻塞:程序在正常运行没有遇到IO操作,或者通过 ...
- Linux 后台运行python .sh等程序,以及查看和关闭后台运行程序操作
1.运行.sh文件 直接用./sh 文件就可以运行,但是如果想后台运行,即使关闭当前的终端也可以运行的话,需要nohup命令和&命令. (1)&命令 功能:加在一个命令的最后,可以把这 ...
- 旋转矩形碰撞检测 OBB方向包围盒算法
在cocos2dx中进行矩形的碰撞检测时需要对旋转过的矩形做碰撞检查,由于游戏没有使用Box2D等物理引擎,所以采用了OBB(Oriented bounding box)方向包围盒算法,这个算法是基于 ...
- 用户管理模块之mysql.user
不使用-h参数来指定登录host,默认会连接localhost,仅当mysql.user表中有一条对应的localhost访问授权(username@%不对任何主机做限制也不行)时登录才成功,否则登录 ...
- c# Data = select new{} 返回值的显示
- iOS逆向系列-Cycript
概述 Cycript 是Objective-C++.ES(JavaScript).Java等语法的混合物. 可以用来探索.修改.调试正在运行的Mac\iOS App. 通过Cydia安装Cycript ...
- linux流量监控iftop命令安装详解
iftop跟nload差不多,也是捕获网卡流量的命令,nload的安装见之前发布的教程:http://www.cnblogs.com/catlee/p/5703541.html 开始安装.本文以cen ...