摘要:魔術(shù)方法構(gòu)造函數(shù)允行開發(fā)者在一個(gè)類中定義一個(gè)方法作為構(gòu)造函數(shù)。如果子類沒有定義構(gòu)造函數(shù)則會(huì)如同一個(gè)普通的類方法一樣從父類繼承假如沒有被定義為的話。和函數(shù)會(huì)檢查類中是否存在一個(gè)魔術(shù)方法。魔術(shù)常量魔法方法
PHP - 魔術(shù)常量 __LINE__
文件中的當(dāng)前行號
__FILE__文件的完整路徑和文件名。如果用在被包含文件中,則返回被包含的文件名。
__DIR__文件所在的目錄。如果用在被包括文件中,則返回被包括的文件所在的目錄。
__FUNCTION__函數(shù)名稱常量返回該函數(shù)被定義時(shí)的名字(區(qū)分大小寫)。
__CLASS__類的名稱常量返回該類被定義時(shí)的名字(區(qū)分大小寫)。
__TRAIT__Trait 的名字常量返回 trait 被定義時(shí)的名字(區(qū)分大小寫)。
__METHOD__類的方法名返回該方法被定義時(shí)的名字(區(qū)分大小寫)。
__NAMESPACE__當(dāng)前命名空間的名稱(區(qū)分大小寫)。此常量是在編譯時(shí)定義的(PHP 5.3.0 新增)。
PHP - 魔術(shù)方法 構(gòu)造函數(shù)void __construct ([ mixed $args [, $... ]] )
PHP 5 允行開發(fā)者在一個(gè)類中定義一個(gè)方法作為構(gòu)造函數(shù)。具有構(gòu)造函數(shù)的類會(huì)在每次創(chuàng)建新對象時(shí)先調(diào)用此方法,所以非常適合在使用對象之前做一些初始化工作。
析構(gòu)函數(shù)Note: 如果子類中定義了構(gòu)造函數(shù)則不會(huì)隱式調(diào)用其父類的構(gòu)造函數(shù)。要執(zhí)行父類的構(gòu)造函數(shù),需要在子類的構(gòu)造函數(shù)中調(diào)用 parent::__construct()。如果子類沒有定義構(gòu)造函數(shù)則會(huì)如同一個(gè)普通的類方法一樣從父類繼承(假如沒有被定義為 private 的話)。
oid __destruct ( void )
PHP 5 引入了析構(gòu)函數(shù)的概念,這類似于其它面向?qū)ο蟮恼Z言,如 C++。析構(gòu)函數(shù)會(huì)在到某個(gè)對象的所有引用都被刪除或者當(dāng)對象被顯式銷毀時(shí)執(zhí)行。
方法重載public mixed __call ( string $name , array $arguments ) public static mixed __callStatic ( string $name , array $arguments )
在對象中調(diào)用一個(gè)不可訪問方法時(shí),__call()?會(huì)被調(diào)用。
用靜態(tài)方式中調(diào)用一個(gè)不可訪問方法時(shí),__callStatic()會(huì)被調(diào)用。
$name 參數(shù)是要調(diào)用的方法名稱。$arguments 參數(shù)是一個(gè)枚舉數(shù)組,包含著要傳遞給方法 $name 的參數(shù)。
屬性重載public void __set ( string $name , mixed $value ) public mixed __get ( string $name ) public bool __isset ( string $name ) public void __unset ( string $name )
在給不可訪問屬性賦值時(shí),__set()?會(huì)被調(diào)用。
讀取不可訪問屬性的值時(shí),__get()?會(huì)被調(diào)用。
當(dāng)對不可訪問屬性調(diào)用 isset() 或 empty() 時(shí),__isset()?會(huì)被調(diào)用。
當(dāng)對不可訪問屬性調(diào)用 unset() 時(shí),__unset()?會(huì)被調(diào)用。
參數(shù) $name 是指要操作的變量名稱。__set()?方法的 $value 參數(shù)指定了 $name 變量的值。
屬性重載只能在對象中進(jìn)行。在靜態(tài)方法中,這些魔術(shù)方法將不會(huì)被調(diào)用。所以這些方法都不能被 聲明為 static。從 PHP 5.3.0 起, 將這些魔術(shù)方法定義為 static 會(huì)產(chǎn)生一個(gè)警告。
__sleep()和__wakeup()Note: 因?yàn)?PHP 處理賦值運(yùn)算的方式,__set()?的返回值將被忽略。類似的, 在下面這樣的鏈?zhǔn)劫x值中,__get()?不會(huì)被調(diào)用:$a = $obj->b = 8
Note: 在除 isset() 外的其它語言結(jié)構(gòu)中無法使用重載的屬性,這意味著當(dāng)對一個(gè)重載的屬性使用 empty() 時(shí),重載魔術(shù)方法將不會(huì)被調(diào)用。為避開此限制,必須將重載屬性賦值到本地變量再使用 empty()。
public array __sleep ( void ) void __wakeup ( void )
serialize() 函數(shù)會(huì)檢查類中是否存在一個(gè)魔術(shù)方法?__sleep()。如果存在,該方法會(huì)先被調(diào)用,然后才執(zhí)行序列化操作。此功能可以用于清理對象,并返回一個(gè)包含對象中所有應(yīng)被序列化的變量名稱的數(shù)組。如果該方法未返回任何內(nèi)容,則 NULL 被序列化,并產(chǎn)生一個(gè) E_NOTICE 級別的錯(cuò)誤。
Note:__sleep() 不能返回父類的私有成員的名字。這樣做會(huì)產(chǎn)生一個(gè) E_NOTICE 級別的錯(cuò)誤??梢杂?Serializable 接口來替代。
__sleep()?方法常用于提交未提交的數(shù)據(jù),或類似的清理操作。同時(shí),如果有一些很大的對象,但不需要全部保存,這個(gè)功能就很好用。
與之相反,unserialize() 會(huì)檢查是否存在一個(gè)?__wakeup()?方法。如果存在,則會(huì)先調(diào)用?__wakeup?方法,預(yù)先準(zhǔn)備對象需要的資源。
__wakeup()?經(jīng)常用在反序列化操作中,例如重新建立數(shù)據(jù)庫連接,或執(zhí)行其它初始化操作。
__toString()public string __toString ( void )
__toString()?方法用于一個(gè)類被當(dāng)成字符串時(shí)應(yīng)怎樣回應(yīng)。例如 echo $obj; 應(yīng)該顯示些什么。此方法必須返回一個(gè)字符串,否則將發(fā)出一條 E_RECOVERABLE_ERROR 級別的致命錯(cuò)誤。
__invoke()mixed __invoke ([ $... ] )
當(dāng)嘗試以調(diào)用函數(shù)的方式調(diào)用一個(gè)對象時(shí),__invoke()?方法會(huì)被自動(dòng)調(diào)用。
__set_state()static object __set_state ( array $properties )
自 PHP 5.1.0 起當(dāng)調(diào)用 var_export() 導(dǎo)出類時(shí),此靜態(tài) 方法會(huì)被調(diào)用。
本方法的唯一參數(shù)是一個(gè)數(shù)組,其中包含按 array("property" => value, ...) 格式排列的類屬性。
PHP: 魔術(shù)常量
PHP: 魔法方法
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/22461.html
摘要:前言中的常量大部分都是不變的,但是有個(gè)常量會(huì)隨著他們所在代碼位置的變化而變化,這個(gè)常量被稱為魔術(shù)常量。名包括其被聲明的作用區(qū)域例如。其行為類中定義的方法一致。 前言 PHP 中的常量大部分都是不變的,但是有8個(gè)常量會(huì)隨著他們所在代碼位置的變化而變化,這8個(gè)常量被稱為魔術(shù)常量。 LINE : 文件中的當(dāng)前行號 FILE : 文件的完整路徑和文件名 DIR : 文件所在的目錄 FUNCT...
摘要:注意和是不同的變量,處理它們的方式不同變量說明默認(rèn)情況下包含了,和的數(shù)組。包含相同的信息,但它不是一個(gè)超全局變量。這些特殊的常量不區(qū)分大小寫,如下幾個(gè)的魔術(shù)常量名稱說明文件中的當(dāng)前行號。 整理了下關(guān)于php的基礎(chǔ)知識,參考了些資料,如下: 超全局變量 超全局變量 — 超全局變量是在全部作用域中始終可用的內(nèi)置變量: $GLOBALS $GLOBALS — 引用全局作用域中可用的全部變量 ...
摘要:類與對象基本概念如果在之后跟著的是一個(gè)包含有類名的字符串,則該類的一個(gè)實(shí)例被創(chuàng)建。如果該類屬于一個(gè)名字空間,則必須使用其完整名稱。如果一個(gè)類被聲明為,則不能被繼承。命名空間通過關(guān)鍵字來聲明。 類與對象 基本概念 new:如果在 new 之后跟著的是一個(gè)包含有類名的字符串,則該類的一個(gè)實(shí)例被創(chuàng)建。如果該類屬于一個(gè)名字空間,則必須使用其完整名稱。 Example #3 創(chuàng)建一個(gè)實(shí)例 ...
摘要:面向?qū)ο竺嫦驅(qū)ο蠡A(chǔ)面向?qū)ο笫裁词穷惥哂邢嗤瑢傩蕴卣骱头椒ㄐ袨榈囊幌盗袀€(gè)體的集合,類是一個(gè)抽象的概念。析構(gòu)函數(shù),當(dāng)一個(gè)對象被銷毀前,自動(dòng)調(diào)用。作用是為新克隆的對象進(jìn)行初始化賦值對象序列化時(shí),自動(dòng)調(diào)用。使用抽象類的作用限制實(shí)例化。 面向?qū)ο?面向?qū)ο蠡A(chǔ) 面向?qū)ο?什么是類? 具有相同屬性(特征)和方法(行為)的一系列個(gè)體的集合,類是一個(gè)抽象的概念。 什么是對象? 從類中,拿到的具有具體...
摘要:對象調(diào)用某個(gè)方法,若方法存在,則直接調(diào)用若不存在,則會(huì)去調(diào)用函數(shù)。魔術(shù)常量返回文件中的當(dāng)前行號。在中該值總是小寫字母的。返回類的方法名新加。返回該方法被定義時(shí)的名字區(qū)分大小寫。你傳入的參數(shù)是程序?qū)?huì)輸出您要調(diào)用的方法不存在。 魔術(shù)函數(shù) __construct() 實(shí)例化對象時(shí)被調(diào)用,當(dāng)__construct和以類名為函數(shù)名的函數(shù)同時(shí)存在時(shí),__construct將被調(diào)用,另一個(gè)不被調(diào)...
閱讀 3009·2023-04-26 02:22
閱讀 2355·2021-11-17 09:33
閱讀 3251·2021-09-22 16:06
閱讀 1164·2021-09-22 15:54
閱讀 3600·2019-08-29 13:44
閱讀 2022·2019-08-29 12:37
閱讀 1376·2019-08-26 14:04
閱讀 1978·2019-08-26 11:57