php中的技术选型学习(一文读懂PHP文件加载机制)

php文件加载有四种语句:

1. include

2. require

3. include_once

4. require_once

php中的技术选型学习(一文读懂PHP文件加载机制)(1)

方法详解:

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

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

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

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

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

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

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

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

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

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


    关于路径的其他引申

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

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

    ,

    免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

      分享
      投诉
      首页