Heim > Artikel > Backend-Entwicklung > 引入命名空间后 为什么不用指定文件路径?
引入命名空间后 为什么不用指定文件路径?
引入命名空间后 为什么不用指定文件路径?
因为有一个函数,用来根据你的命名空间去自动加载文件。
所以看起来是不用指定文件路径
,其实是有一个自动加载机制帮你require了。
补充一下:
LZ可以去官方文档看看:http://php.net/manual/zh/function.autoload.php
php的自动装载函数注册,这是个简单的示例
<code><?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'); } }</code></code>
亲,你的命题本身是错误的,所以没必要解释为什么了。
命名空间可以简单地理解为长类名,比如项目中可能有 \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看看有什么结果。
可以去百度研究研究spl_autoload_register
除非自动加载机制在运作,否则,一定会报错。关于自动加载机制的写法你看一下
http://www.cnblogs.com/quinnxu/p/4824805...