PHP中的自动加载(配合命名空间)易混淆简单纪要

https://www.cnblogs.com/52php/p/5852572.html psr0-4规范导学
同命名空间下的相互调用
在平时我们使用命令空间时,有时候可能是在同一个命名空间下的2个类文件在相互调用。这个时候就要注意,在自动调用的问题了。
比如LibFactory.php 和 LibDbMySQL.php

我想在 LibFactory.php 中调用 LibDbMySQL.php。怎么调用呢?以下是错误的示范:

new Lib\Db\MySQL();  
//报错,提示说 D:\wamp\www\testphp\module\Lib\Lib\Db\MySQL.php is not exist

看到没?这种方式是在Lib命名空间的基础上来加载的。所以会加载2个Lib。这种方式相当于相对路径在加载。

正确的做法是,如果是在同一个命名空间下平级的2个文件。可以直接调用,不用命名空间。

new MySQL(); //直接这样就可以了。
new Db\MySQL(); //如果有个Db文件夹,就这样。

还有一种方法就是使用 use 。使用user就可以带上Lib了。use使用的是绝对路径。

use Lib\Db\MySQL;
new MySQL();

我想在 LibDbMySQL.php 中调用 LibRegister.php。怎么调用呢?

应该这样

use Lib\Register;
Register::getInstance();

因为现在已经在LibDb这样一个命名空间了,如果你不用use,而是使用LibRegister::getInstance()或者使用Register::getInstance()的话。将是在LibDb这个空间下进行相对路径的加载,是错误的。

记录你我
请先登录后发表评论
  • latest comments
  • 总共0条评论