PHP 使用命名空間(namespace),實現自動載入

來源:互聯網
上載者:User

標籤:

樣本:

#/DB/MySql.class.php也就是DB檔案夾下有MySql.class.php檔案namespace DB;class MySql{    public function __construct()    {        var_dump(__FILE__);    }}
#/index.phpnamespace Home;use DB\MySql;$mysql = new MySql();
報錯
Fatal error: Class ‘DB\MySql‘ not found in D:\localhost\demo\space\index.php on line 23
修改

修改 index.php 改成如下,可以了,但是為什麼不能自動載入?

namespace Home;use DB\MySql;spl_autoload_register(function ($class) {    if ($class) {        $file = str_replace(‘\\‘, ‘/‘, $class);        $file .= ‘.class.php‘;        if (file_exists($file)) {            include $file;        }    }});$mysql = new MySql();

要點:

第一:

命名空間跟檔案載入並無直接關係,只是有些語言,將命名空間結構和檔案結構對應起來了。 以php為例,一般的命名空間結構,跟php檔案結構是存在映射關係的,通過命名空間名稱,就能算出該類的實際儲存位置, 然後執行個體化的時候,會觸發用設定的spl自動載入函數將檔案引入。

Xee:命名空間是事先通過自動匯入或者include,require之類匯入的,然後會根據命名空間對應起來,實現自動載入)

第二:

namespace Home;use DB\MySql;$mysql = new MySql();

實際執行代碼的時候是 new \DB\MySql(); 找不到這個檔案的時候就會調用你的autoload函數 並file_exists("DB/MySql.class.php"),在目前的目錄下尋找這個檔案,在找不到的情況下然後就是你看到的錯誤

Xee:在被調用的MySql.class.php檔案中,也要有\DB\MySql的命名空間)

第三:

如果剛開始瞭解php命名空間,去看如何使用PHP命名空間;多翻翻使用命名空間的架構的源碼,如micro-mvc,slim等。

還有PSR-4——新鮮出爐的PHP規範,其中就有這個:

 *      // register the base directories for the namespace prefix *      $loader->addNamespace(‘Foo\Bar‘, ‘/path/to/packages/foo-bar/src‘); *      $loader->addNamespace(‘Foo\Bar‘, ‘/path/to/packages/foo-bar/tests‘);

第四:

我們常用 db\mysql,這種形式的命名空間!不是一定要使用\這個反斜線的,還可以使用例如:db::mysql;或者db_mysql等;要在自動尋找類的函數方法中進行分析.

<參考:PHP命名空間 namespace 如何?自動載入>

PHP 使用命名空間(namespace),實現自動載入

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.