摘要:不傳參數,直接調用,會默認調用來加載類,如果后面再調用有傳參數的,也會失效的如果使用了命名空間,那么會把路徑和類名一同帶過來的。
自動加載
兩種實現方式
1、__autoload();
2、spl_autoload_register(); (主要使用)
__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()
此函數的功能就是把函數注冊至SPL的__autoload函數棧中,并移除系統默認的__autoload()函數。
不傳參數,直接調用**spl_autoload_register()**,會默認調用spl_autoload()來加載類,如果后面再調用**spl_autoload_register()**(有傳參數的),也會失效的 *如果使用了命名空間,那么$class_name會把路徑和類名一同帶過來的。*命名空間
主要技術點
*namespace* (定義命名空間) *use* (使用命名空間的快捷方式) \__NAMESPACE\__ (獲取當前命名空間)
命名空間分類
1、**邏輯命名空間**----與實際物理地址沒有任何關系 2、**物理命名空間**----按照實際目錄結構定義的(*推薦使用*,方便尋址)
定義命名空間
namespace wt aobao; 注意:必須使用**反斜杠**,而且開頭不能以反斜杠開頭
使用命名空間
1、**非限定名稱**(調用當前命名空間的類) 2、**限定名稱**(調用當前命名空間的子命名空間的類) 3、**完全限定名稱**(調用非當前命名空間或非當前命名空間的子空間的類)
命名空間的價值
解決2個問題: 1、用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字沖突。 2、為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創建一個別名(或簡短)的名稱,提高源代碼的可讀性。
命名空間的作用域
只有 函數、類、常量 能存在作用域下(其余元素不會存在在命名空間中)
注意: 1、變量不受命名空間(邏輯路徑)作用,變量是全局的 例如:$name = "xcxcx"; 2、能使用命名空間的常量,只能是const定義的常量,而define定義的常量是全局,不受命名空間作用 例如:const CON = "xcxcsdw"; 3、在嵌套的情況下(例如:a.php嵌套b.php),b.php中的函數、類、常量不會繼承a.php中的命名空間,而b.php中默認是頂級命名空間
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22180.html
摘要:前言在開始之前,歡迎關注我自己的博客這篇文章是對自動加載功能的一個總結,內容涉及的自動加載功能的命名空間的與標準等內容。要實現第一步,第二步的功能,必須在開發時約定類名與磁盤文件的映射方法,只有這樣我們才能根據類名找到它對應的磁盤文件。 前言 在開始之前,歡迎關注我自己的博客:www.leoyang90.cn 這篇文章是對PHP自動加載功能的一個總結,內容涉及PHP的自動加載功能、P...
摘要:任務是加載類的初始化頂級命名空間與文件路徑映射初始化和注冊。在實際情況下可能會出現這樣的情況。值得注意的是這個函數返回的是一個匿名函數,為什么呢原因就是類中的等等都是的。。。關于匿名函數的綁定功能。 前言 在開始之前,歡迎關注我自己的博客:www.leoyang90.cn 上一篇文章,我們討論了 PHP 的自動加載原理、PHP 的命名空間、PHP 的 PSR0 與 PSR4 標準,有...
摘要:如果遍歷后沒有找到,則加載失敗。在之后碰到了之后直接拿來用,提高系統自動加載的性能。這里我們就講完了注冊自動加載。使用自動加載我們在中定義了我們自動加載函數式方法。 繼 生命周期的第二篇,大家盡可放心,不會隨便鴿文章的 第一篇中,我們提到了入口腳本,也說了,里面注冊了自動加載的功能 本文默認你有自動加載和命名空間的基礎。如果沒有請 看此篇文章 php 類的自動加載與命名空間 自動加載...
摘要:概述這份聲明了關于從文件路徑自動加載類的規范。當根據完全限定類名加載對應的文件時由最開始的命名空間開始,連續的一個或多個命名空間組成的序列,不包括最前面的命名空間分隔符,在這個完全限定類名中這個序列稱為命名空間前綴,對應了至少一個基礎目錄。 PSR-4:自動加載 翻譯:薛粲授權許可:CC BY-NC 4.0 這份文檔是《PSR-4: Autoloader》的非官方譯文。 英文原文使用的...
前言 在開始之前,歡迎關注我自己的博客:www.leoyang90.cn上一篇 文章我們講到了 Composer 自動加載功能的啟動與初始化,經過啟動與初始化,自動加載核心類對象已經獲得了頂級命名空間與相應目錄的映射,換句話說,如果有命名空間 AppConsoleKernel,我們已經知道了 App 對應的目錄,接下來我們就要解決下面的就是 ConsoleKernel這一段。 注冊 我們先回顧...
閱讀 3096·2021-02-22 17:12
閱讀 719·2019-08-30 15:55
閱讀 3079·2019-08-30 15:54
閱讀 1384·2019-08-29 16:56
閱讀 1862·2019-08-29 15:13
閱讀 1716·2019-08-29 13:19
閱讀 601·2019-08-26 13:40
閱讀 2822·2019-08-26 10:26