php 魔術方法與魔術常量 彙總~
阿新 • • 發佈:2019-02-12
從php5以後的版本,php的類就可以使用魔術方法了。
php規定以兩個下劃線(__)開頭的方法都保留為魔術方法,所以建議大家函式名最好不用__開頭,除非是為了過載已有的魔術方法。 PHP中的魔術方法有 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone, __autoload 1、__get、__set 這兩個方法是為在類和他們的父類中沒有宣告的屬性而設計的 __get( $property ) 當呼叫一個未定義的屬性時,此方法會被觸發,傳遞的引數是被訪問的屬性名 __set( $property, $value ) 給一個未定義的屬性賦值時,此方法會被觸發,傳遞的引數是被設定的屬性名和值 這裡的沒有宣告包括當使用物件呼叫時,訪問控制為proteced,private的屬性(即沒有許可權訪問的屬性)。 2、__isset、__unset __isset( $property ) 當在一個未定義的屬性上呼叫isset()函式時呼叫此方法 __unset( $property ) 當在一個未定義的屬性上呼叫unset()函式時呼叫此方法 與__get方法和__set方法相同,這裡的沒有宣告包括當使用物件呼叫時,訪問控制為proteced,private的屬性(即沒有許可權訪問的屬性) 3、__call __call( $method, $arg_array ) 當呼叫一個未定義的方法是呼叫此方法 這裡的未定義的方法包括沒有許可權訪問的方法;如果方法不存在就去父類中找這個方法,如果父類中也不存在就去呼叫本類的__call()方法,如果本類中不存在__call()方法就去找父類中的__call()方法- <?php
- class Loader
- {
- staticfunction autoload_class($class_name)
- {
- //尋找正確的$class_name類,並引入,沒有則丟擲異常
- }
- }
- /**
- * 設定物件的自動載入
-
* spl_autoload_register — Register given function as __autoload() implementation
- */
- spl_autoload_register(array('Loader', 'autoload_class'));
- $a = new Test();//Test沒用require就例項化,實現自動載入,很多框架就用這種方法自動載入類
- ?>
魔術常量
1。__LINE__
返回檔案中的當前行號。
2。__FILE__
返回檔案的完整路徑和檔名。如果用在包含檔案中,則返回包含檔名。自 PHP 4.0.2 起,__FILE__ 總是包含一個絕對路徑,而在此之前的版本有時會包含一個相對路徑。
3。__FUNCTION__
返回函式名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該函式被定義時的名字(區分大小寫)。在 PHP 4 中該值總是小寫字母的。
4。__CLASS__
返回類的名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該類被定義時的名字(區分大小寫)。在 PHP 4 中該值總是小寫字母的。
5。__METHOD__
返回類的方法名(PHP 5.0.0 新加)。返回該方法被定義時的名字(區分大小寫)。