摘要:不傳參數(shù),直接調(diào)用,會默認調(diào)用來加載類,如果后面再調(diào)用有傳參數(shù)的,也會失效的如果使用了命名空間,那么會把路徑和類名一同帶過來的。
自動加載
兩種實現(xiàn)方式
1、__autoload();
2、spl_autoload_register(); (主要使用)
__autoload()
現(xiàn)在很少使用,因為使用這種方式,在一個系統(tǒng)的實現(xiàn)中,假如需要使用很多其它的類庫,這些類庫可能是由不同的開發(fā)工程師開發(fā),其類名與實際的磁盤文件的映射規(guī)則不盡相同。這時假如要實現(xiàn)類庫文件的自動加載,就必須在__autoload()函數(shù)中將所有的映射規(guī)則全部實現(xiàn),因此__autoload()函數(shù)有可能會非常復(fù)雜,甚至無法實現(xiàn)。最后可能會導(dǎo)致__autoload()函數(shù)十分臃腫,這時即便能夠?qū)崿F(xiàn),也會給將來的維護和系統(tǒng)效率帶來很大的負面影響。在這種情況下,在PHP5引入SPL標準庫,一種新的解決方案,即spl_autoload_register()函數(shù)。
function __autoload($class_name) { require_once ($class_name . “class.php”); } $memo= new Demo();
spl_autoload_register()
此函數(shù)的功能就是把函數(shù)注冊至SPL的__autoload函數(shù)棧中,并移除系統(tǒng)默認的__autoload()函數(shù)。
不傳參數(shù),直接調(diào)用**spl_autoload_register()**,會默認調(diào)用spl_autoload()來加載類,如果后面再調(diào)用**spl_autoload_register()**(有傳參數(shù)的),也會失效的 *如果使用了命名空間,那么$class_name會把路徑和類名一同帶過來的。*命名空間
主要技術(shù)點
*namespace* (定義命名空間) *use* (使用命名空間的快捷方式) \__NAMESPACE\__ (獲取當前命名空間)
命名空間分類
1、**邏輯命名空間**----與實際物理地址沒有任何關(guān)系 2、**物理命名空間**----按照實際目錄結(jié)構(gòu)定義的(*推薦使用*,方便尋址)
定義命名空間
namespace wt aobao; 注意:必須使用**反斜杠**,而且開頭不能以反斜杠開頭
使用命名空間
1、**非限定名稱**(調(diào)用當前命名空間的類) 2、**限定名稱**(調(diào)用當前命名空間的子命名空間的類) 3、**完全限定名稱**(調(diào)用非當前命名空間或非當前命名空間的子空間的類)
命名空間的價值
解決2個問題: 1、用戶編寫的代碼與PHP內(nèi)部的類/函數(shù)/常量或第三方類/函數(shù)/常量之間的名字沖突。 2、為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創(chuàng)建一個別名(或簡短)的名稱,提高源代碼的可讀性。
命名空間的作用域
只有 函數(shù)、類、常量 能存在作用域下(其余元素不會存在在命名空間中)
注意: 1、變量不受命名空間(邏輯路徑)作用,變量是全局的 例如:$name = "xcxcx"; 2、能使用命名空間的常量,只能是const定義的常量,而define定義的常量是全局,不受命名空間作用 例如:const CON = "xcxcsdw"; 3、在嵌套的情況下(例如:a.php嵌套b.php),b.php中的函數(shù)、類、常量不會繼承a.php中的命名空間,而b.php中默認是頂級命名空間
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/22180.html
摘要:前言在開始之前,歡迎關(guān)注我自己的博客這篇文章是對自動加載功能的一個總結(jié),內(nèi)容涉及的自動加載功能的命名空間的與標準等內(nèi)容。要實現(xiàn)第一步,第二步的功能,必須在開發(fā)時約定類名與磁盤文件的映射方法,只有這樣我們才能根據(jù)類名找到它對應(yīng)的磁盤文件。 前言 在開始之前,歡迎關(guān)注我自己的博客:www.leoyang90.cn 這篇文章是對PHP自動加載功能的一個總結(jié),內(nèi)容涉及PHP的自動加載功能、P...
摘要:任務(wù)是加載類的初始化頂級命名空間與文件路徑映射初始化和注冊。在實際情況下可能會出現(xiàn)這樣的情況。值得注意的是這個函數(shù)返回的是一個匿名函數(shù),為什么呢原因就是類中的等等都是的。。。關(guān)于匿名函數(shù)的綁定功能。 前言 在開始之前,歡迎關(guān)注我自己的博客:www.leoyang90.cn 上一篇文章,我們討論了 PHP 的自動加載原理、PHP 的命名空間、PHP 的 PSR0 與 PSR4 標準,有...
摘要:如果遍歷后沒有找到,則加載失敗。在之后碰到了之后直接拿來用,提高系統(tǒng)自動加載的性能。這里我們就講完了注冊自動加載。使用自動加載我們在中定義了我們自動加載函數(shù)式方法。 繼 生命周期的第二篇,大家盡可放心,不會隨便鴿文章的 第一篇中,我們提到了入口腳本,也說了,里面注冊了自動加載的功能 本文默認你有自動加載和命名空間的基礎(chǔ)。如果沒有請 看此篇文章 php 類的自動加載與命名空間 自動加載...
摘要:概述這份聲明了關(guān)于從文件路徑自動加載類的規(guī)范。當根據(jù)完全限定類名加載對應(yīng)的文件時由最開始的命名空間開始,連續(xù)的一個或多個命名空間組成的序列,不包括最前面的命名空間分隔符,在這個完全限定類名中這個序列稱為命名空間前綴,對應(yīng)了至少一個基礎(chǔ)目錄。 PSR-4:自動加載 翻譯:薛粲授權(quán)許可:CC BY-NC 4.0 這份文檔是《PSR-4: Autoloader》的非官方譯文。 英文原文使用的...
前言 在開始之前,歡迎關(guān)注我自己的博客:www.leoyang90.cn上一篇 文章我們講到了 Composer 自動加載功能的啟動與初始化,經(jīng)過啟動與初始化,自動加載核心類對象已經(jīng)獲得了頂級命名空間與相應(yīng)目錄的映射,換句話說,如果有命名空間 AppConsoleKernel,我們已經(jīng)知道了 App 對應(yīng)的目錄,接下來我們就要解決下面的就是 ConsoleKernel這一段。 注冊 我們先回顧...
閱讀 3109·2021-02-22 17:12
閱讀 732·2019-08-30 15:55
閱讀 3114·2019-08-30 15:54
閱讀 1401·2019-08-29 16:56
閱讀 1872·2019-08-29 15:13
閱讀 1733·2019-08-29 13:19
閱讀 612·2019-08-26 13:40
閱讀 2833·2019-08-26 10:26