兩種實現方式
一、__autoload();
二、spl_autoload_register(); (主要使用)php
__autoload()
如今不多使用,由於使用這種方式,在一個系統的實現中,假如須要使用不少其它的類庫,這些類庫多是由不一樣的開發工程師開發,其類名與實際的磁盤文件的映射規則不盡相同。這時假如要實現類庫文件的自動加載,就必須在__autoload()函數中將全部的映射規則所有實現,所以__autoload()函數有可能會很是複雜,甚至沒法實現。最後可能會致使__autoload()函數十分臃腫,這時即使可以實現,也會給未來的維護和系統效率帶來很大的負面影響。在這種狀況下,在PHP5引入SPL標準庫,一種新的解決方案,即spl_autoload_register()函數。函數
function __autoload($class_name) { require_once ($class_name . 「class.php」); } $memo= new Demo();
spl_autoload_register()ui
此函數的功能就是把函數註冊至SPL的__autoload函數棧中,並移除系統默認的__autoload()函數。spa
不傳參數,直接調用**spl_autoload_register()**,會默認調用spl_autoload()來加載類,若是後面再調用**spl_autoload_register()**(有傳參數的),也會失效的 *若是使用了命名空間,那麼$class_name會把路徑和類名一同帶過來的。*
主要技術點code
*namespace* (定義命名空間) *use* (使用命名空間的快捷方式) \__NAMESPACE\__ (獲取當前命名空間)
命名空間分類繼承
一、**邏輯命名空間**----與實際物理地址沒有任何關係 二、**物理命名空間**----按照實際目錄結構定義的(*推薦使用*,方便尋址)
定義命名空間作用域
namespace wt\\taobao; 注意:必須使用**反斜槓**,並且開頭不能以反斜槓開頭
使用命名空間開發
一、**非限定名稱**(調用當前命名空間的類) 二、**限定名稱**(調用當前命名空間的子命名空間的類) 三、**徹底限定名稱**(調用非當前命名空間或非當前命名空間的子空間的類)
命名空間的價值io
解決2個問題: 一、用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字衝突。 二、爲很長的標識符名稱(一般是爲了緩解第一類問題而定義的)建立一個別名(或簡短)的名稱,提升源代碼的可讀性。
命名空間的做用域function
只有
函數
、類
、常量
能存在做用域下(其他元素不會存在在命名空間中)
注意: 一、變量不受命名空間(邏輯路徑)做用,變量是全局的 例如:$name = 'xcxcx'; 二、能使用命名空間的常量,只能是const定義的常量,而define定義的常量是全局,不受命名空間做用 例如:const CON = 'xcxcsdw'; 三、在嵌套的狀況下(例如:a.php嵌套b.php),b.php中的函數、類、常量不會繼承a.php中的命名空間,而b.php中默認是頂級命名空間