php四种文件加载语句

php四种文件加载语句

https://mp.weixin.qq.com/s/Wsn4grDRxVIgMfu__E_oWQ

1、include

2、require

3、include_once

4、require_once

 

方法详解:

  1. include 语句包含并运行指定文件。

  2. require 和 include 几乎完全一样,除了处理失败的方式不同之外。require 在出错时产生 E_COMPILE_ERROR(编译致命错误 64 编译时致命性错。这就像由Zend脚本引擎生成了一个 E_ERROR。) 级别的错误。换句话说将导致脚本中止而 include只产生警告(E_WARNING),脚本会继续运行。

  3. include_once 语句在脚本执行期间包含并运行指定文件。此行为和 include 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次。可以用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。

  4. require_once 语句和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。

总结:

  1. include 和 require 语句都是包含并运行指定文件,不同的是处理失败的方式不同,所以一般 require 用于加载重要文件,比如加载框架的引导文件,如果出错将终止程序,include 一般用于加载配置文件或者第三方扩展库等,比如 composer 就是用的 include 加载文件的。

  2. 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 配置选项的值

  1. 直接引入(包含)文件默认是以上面set_include_path设置的目录为环境目录,环境目录找不到再从当前目录找

  2. / 表示服务器根目录,linux上面直接表示磁盘根目录,Windows下面表示某个磁盘根目录例如D:\\,realpath()可以返回绝对路径。

  3. ./ 表示当前运行文件的同级目录(入口),而不是当前脚本所在的目录(include 语句所在脚本文件的目录)

  4. 如果以相对于当前脚本文件引用文件请用__DIR__常量

注意:第一种情况,请小心了!这个一般表示从当前目录找,但是什么是当前目录呢?这个不同情况是不同的,它会先把当前运行文件的目录当成当前目录,如果找不到,再把当前脚本所在的目录当成当前目录,从当前脚本所在目录开始找,如果还找不到就报错,引入文件不存在。

所以如果意图清楚,最好是使用最后两种方式引入文件,这样能减少不必要的麻烦,另外使用绝对路径比使用相对路径加载文件性能更高,这样能避免系统去解析相对路径而耗费一些时间。

当前运行文件,当前脚本,请注意仔细理解它们的差别,前者作为入口运行,后者则被脚本通过引用的方式调用。魔术常亮\__FILE\__\__DIR\__ 就是后者的文件名(包含完整的绝对路径)和目录。


关于路径的其他引申

PHP脚本这种文件相互引用包含的关系可和网页中静态文件css中的../路径不同,css中的路径之和所在css文件url路径相关,和网页没有半毛钱关系,网页只是加载它而已,但是如果css中使用/那情况就不同了,一般/为根域名,再说一遍,静态文件中除了/其他的路径都是相对于当前静态文件的,和网页地址没有关系。网页中的.//则是相对于当前url路径(对于pathinfo也没有关系,不会受影响,认不出是假目录的)和根域。

还可以通过注册自动加载方法来实现自动加载,框架大部分都实现了自动加载,不然手动写包含语句不利于维护,太麻烦。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112739.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 硬盘恢复分区_怎么把efi分区删掉

    硬盘恢复分区_怎么把efi分区删掉Windows系统在安装的时候,会自动为我们的磁盘划分一个恢复分区和一个EFI分区。如果后面不打算再用这些分区的时候,却发现无法删除。本文将提供解决方法。因为误操作会导致数据丢失,所以我将两种不同的解决方法分开成两篇文章以避免干扰:EFI分区/恢复分区不可删除?你需要使用命令行了(配合鼠标操作)EFI分区/恢复分区不可删除?你需要使用命令行了(全命令行操作)本文内容无法删…

    2022年8月11日
    10
  • linux中systemctl详细理解及常用命令

    linux中systemctl详细理解及常用命令一、systemctl理解Linux服务管理两种方式service和systemctlsystemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动。systemd对应的进程管理命令是systemctl1.systemctl命令兼容了service即systemctl也会去/etc/init.d目录下…

    2022年5月9日
    71
  • html a标签打开新窗口_a标签自动跳转

    html a标签打开新窗口_a标签自动跳转<ahref=”javascript:void(0);”onclick=”window.top.open(\”+url+’\’,\’_blank\’)”><iclass=”fafa-file-pdf-o”aria-hidden=”true”></i></a>

    2025年7月28日
    2
  • 贝云cms内容管理系统(thinkphp5.0开源cms管理系统)

    贝云cms内容管理系统(thinkphp5.0开源cms管理系统)

    2021年11月6日
    75
  • VS 2013 所有产品密钥

    VS 2013 所有产品密钥转载自:https://blog.csdn.net/my1989night/article/details/44916079VS2013产品密钥–所有版本VisualStudioUltimate2013KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9VisualStudioPremium2013KEY(密钥):FBJVC-3CMTX-D8DVP…

    2022年5月12日
    56
  • springboot的启动流程图_springboot运行流程

    springboot的启动流程图_springboot运行流程文章目录前言springboot启动流程图第一部分newSpringApplication()第二部分工厂对象构建实例第三部分SpringApplication.run(启动此应用)第四部分SpringApplicationRunListener第五部分banner彩蛋前言研究springboot启动的整个流程。springboot启动流程图第一部分newSpringApplication()第二部分工厂对象构建实例第三部分SpringApplication.

    2022年8月20日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号