這篇文章主要介紹了關於PHP加入命名空間的好處方便自動加載,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
一個PHP項目,通常只有一個入口檔案index.php,我們通常會在這個入口檔案中寫入自動載入函數,用來require以後會實例化的類別檔案。如:
spl_autoload_register(function ($className) { require 'class/' . $className . '.php';});通过以上的代码,我们发现:在自动加载时,我们需要指定存放类的文件夹,以便找到相应的类。那么问题产生了。在引入命名空间之前:
我們的專案目錄
###
##index.php
Controller.php
在index.php中我們需要實例化一個controller目錄下的Controller類,並且呼叫這個物件的model()方法,而這個方法則需要實例化一個model目錄下的Model類。我們執行一下index.php:
Warning: require(controller/Model.php): failed to open stream: No such file or directory
#提示沒有這個檔案或目錄。原因很簡單:PHP在new Model()的時候,是自動去controller目錄下去require的,所以找不到。
那麼,我們的自動載入函數該怎麼寫才能解決問題呢?很顯然,把'controller/'換成'model/' 或 不寫目錄,都不能正常載入。於是,使用命名空間的好處就顯現出來了。
### ###引入命名空间之后:
index.php
Controller.php
Model.php
我们按照文件目录的结构来为每个类写入命名空间,当在一个类中需要实例化另外一个类时,IDE会帮我们写入use namespace ; 。这样,我们在写自动加载的时候,就不用考虑将要加载的类在哪一个文件目录下了,只需要这样写:
spl_autoload_register(function ($class) { require $class . '.php';});因为我们在index.php中use了所用到的类的命名空间,自动加载函数会到相应的命名空间中去寻找类(上述代码中的$class就相当于是'controller\Controller'),而这些类中又需要实例化其他的类,因为这些类中也声明了use 其他类的命名空间 ;,所以自动加载函数又会去相应的命名空间中去require其他类。这样,我们就不会为加载类而发愁了,极大地解放了我们的编程负担。
相关推荐:
以上是PHP加入命名空間的好處方便自動載入的詳細內容。更多資訊請關注PHP中文網其他相關文章!