首頁 >後端開發 >php教程 >PHP加入命名空間的好處方便自動載入

PHP加入命名空間的好處方便自動載入

不言
不言原創
2018-05-04 10:20:181527瀏覽

這篇文章主要介紹了關於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加入ftp扩展的方法

PHP加入数据程序的具体实现方法

以上是PHP加入命名空間的好處方便自動載入的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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