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)
上一篇 2021年10月31日 上午10:00
下一篇 2021年10月31日 上午11:00


相关推荐

  • 关于前端更新需要清空浏览器缓存

    关于前端更新需要清空浏览器缓存清理网站缓存的几种方法

    2026年3月18日
    2
  • 浏览器到服务器端进行通信的简单理解

    浏览器到服务器端进行通信的简单理解

    2021年8月15日
    56
  • python 期货程序化_期货程序化交易

    python 期货程序化_期货程序化交易在这里给大家一个 Python 期货模型参考 作为入门参考应该还可以 这个我曾经写的第一个完整的 python 期货交易模型源码 历史数据来源于自己的数据库 交易接口也是基于 CTP 的自己的交易接口 相当一部分函数是基于其他的 python 自定义类 太多了放不下 只放策略主题部分作为参考 高手们请忽略 importmath sys os NMathimportN

    2026年3月19日
    2
  • 【JVM】JVM类加载机制

    【JVM】JVM类加载机制JVM JVM 类加载机制类加载子系统 类加载机制 类加载器类加载器 classloader 的作用加载 class 文件 平台无关的二进制字节码文件 classloader 有两种装载 class 的方式 时机 隐式 运行过程中 碰到 new 方式生成对象时 隐式调用 classLoader 到 JVM 显式 通过 class forname 动态加载类加载过程装载器把一个类装入 JVM 中要

    2026年3月16日
    2
  • NumPy-读写文件「建议收藏」

    NumPy-读写文件「建议收藏」读写文件NumPy文件读写主要有二进制的文件读写和文件列表形式的数据读写两种形式(1)save函数是以二进制的格式保存数据。  格式:  np.save("./save_arr",arr1)(2)load函数是从二进制的文件中读取数据。  格式:  np.load("./save_arr.npy")(3)savez函数可以将多个数组保存到一个文件中。  …

    2022年5月8日
    48
  • 图片加密解密

    图片加密解密创建java项目运行javamain,会在图片路劲下生成加密后的图片packagecom.example;publicclassMyClass{publicstaticvoidmain(String[]args){//加密图片的路劲KMD1.encrypt(“F:/metro.png”);}}

    2022年6月21日
    36

发表回复

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

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