首頁 >後端開發 >php教程 >引入命名空间后 为什么不用指定文件路径?

引入命名空间后 为什么不用指定文件路径?

WBOY
WBOY原創
2016-06-06 20:10:081071瀏覽

引入命名空间后 为什么不用指定文件路径?

回复内容:

引入命名空间后 为什么不用指定文件路径?

因为有一个函数,用来根据你的命名空间去自动加载文件。

所以看起来是不用指定文件路径,其实是有一个自动加载机制帮你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...

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn