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

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

我想在 Lib\Factory.php 中调用 Lib\Db\MySQL.php。怎么调用呢?以下是错误的示范:

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

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

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

new Db\MySQL(); //直接这样就可以了

还有一种方法就是使用 use 。使用user就可以带上Lib了。

use使用的是绝对路径。use可以规范的定义命名空间路径 让代码更简洁
use Lib\Db\MySQL;
当然也可以使用new \Lib\Db\MySQL();
new MySQL();

我想在 Lib\Db\MySQL.php 中调用 Lib\Register.php。怎么调用呢? 应该这样

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

因为现在已经在Lib\Db这样一个命名空间了,如果你不用use,而是使用Lib\Register::getInstance()或者使用Register::getInstance()的话。将是在Lib\Db这个空间下进行

相对路径

的加载,是错误的。

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