引入命名空间后 为什么不用指定文件路径?
php的自动装载函数注册,这是个简单的示例
<?php
namespace Framework;
class Autoload
{
public function __construct()
{
# code...
}
public static function init()
{
spl_autoload_register('Framework\Autoload::autoload');
}
public static function autoload($class_name='')
{
require_once($class_name.'.class.php');
}
}
亲,你的命题本身是错误的,所以没必要解释为什么了。
命名空间可以简单地理解为长类名,比如项目中可能有 \Core\Object 和 \Project\Object 两个对象,(分别隶属于Core和Project命名空间。)而在调用的时候通过 use Core\Object 或者 use Project\Object 说明后续代码中的 $obj = new Object()到底是Core\Object的实例还是来自Project\Object。这和指定文件路径完全无关。
不用指定文件路径来自于PHP的自动加载机制(包含默认的机制以及项目中的自定义扩展部分),而不是因为使用了命名空间。很简单的一个反例,ZendFramework1版本中并没有使用命名空间,但是同样实现了自动加载。
你可以自己尝试创建一个全新的项目,只有两个文件
index.php
$object = new \Object();
创建Project目录及文件Object.php
namespace \Project
class Object {}
运行index.php看看有什么结果。
2 回答1.4k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
2 回答858 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
2 回答915 阅读
1 回答899 阅读
1 回答828 阅读
因为有一个函数,用来根据你的命名空间去自动加载文件。
所以看起来是
不用指定文件路径
,其实是有一个自动加载机制帮你require了。补充一下:
LZ可以去官方文档看看:http://php.net/manual/zh/function.autoload.php