我爱编程

php使用require()时的注意点

2018-03-01  本文已影响0人  稀饭DD
目录层级

各层级代码如下:

test.php

<?php
  require("a/a.php");
?>

a.php

<?php
  require("../b/b.php");
?>

b.php

<?php
  echo "b";
  exit;
?>

aaa.php

<?php
  echo "aaa";
  exit;
?>
首先test.php能够正确引用到a.php,a.php也能正确引用到b.php,但是访问test.php时报错(无法找到b.php): test报错
而我们直接访问a.php是能够找到b.php的: image.png

原因其实是因为php require()默认的引用机制不是相对最近一次引用的路径,而是相对你当前访问的那个文件的路径,a.php和b.php都觉得自己引用与被引用没有问题,但test.php觉得a.php引用b.php的时候出了问题。

于是从test.php的角度看,a.php必须修复代码,把require("../b/b.php")改成require("b/b.php"),这样test就能正常访问到b了。但是新的问题来了,修改之后直接访问a是无法正确引用到b的...
这样的机制稍微一改动就牵扯全身,以下给出两种解决方案一点注意事项

对于这种引用机制可以这么理解:php作为一个脚本语言,其require的引用原理就是简单的文本拷贝替换,所以最初test.php的第一行代码require("a/a.php")直接被替换成了a.php的全部内容,即require("../b/b.php"),而test.php根据这样的相对路径找不到b.php,因此报错(假设找到了,同理则把这行require再替换成b.php的全部内容)。
但是这样好像依旧解释不了一层层往里面引用时不会报错的情况。对这种情况有合理解释的欢迎指教。

上一篇下一篇

猜你喜欢

热点阅读