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

WBOY
リリース: 2016-06-06 20:10:08
オリジナル
1053 人が閲覧しました

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

回复内容:

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

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

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

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート