一,、魔術(shù)函數(shù)(13個) 1,、__construct() 實(shí)例化對象時被調(diào)用,, 當(dāng)__construct和以類名為函數(shù)名的函數(shù)同時存在時,__construct將被調(diào)用,,另一個不被調(diào)用,。 2、__destruct() 當(dāng)刪除一個對象或?qū)ο蟛僮鹘K止時被調(diào)用,。 3,、__call() 對象調(diào)用某個方法,, 若方法存在,,則直接調(diào)用,;若不存在,,則會去調(diào)用__call函數(shù)。 4,、__get() 讀取一個對象的屬性時,,若屬性存在,則直接返回屬性值,; 若不存在,,則會調(diào)用__get函數(shù)。 5,、__set() 設(shè)置一個對象的屬性時,, 若屬性存在,,則直接賦值,; 若不存在,則會調(diào)用__set函數(shù),。 6、__toString() 打印一個對象的時被調(diào)用,。如echo $obj;或print $obj; 7,、__clone() 克隆對象時被調(diào)用。如:$t=new Test();$t1=clone $t; 8,、__sleep() serialize之前被調(diào)用,。若對象比較大,想刪減一點(diǎn)東東再序列化,,可考慮一下此函數(shù),。 9、__wakeup() unserialize時被調(diào)用,,做些對象的初始化工作,。 10、__isset() 檢測一個對象的屬性是否存在時被調(diào)用,。如:isset($c->name),。 11、__unset() unset一個對象的屬性時被調(diào)用。如:unset($c->name),。 12,、__set_state() 調(diào)用var_export時,被調(diào)用,。用__set_state的返回值做為var_export的返回值,。 13、__autoload() 實(shí)例化一個對象時,,如果對應(yīng)的類不存在,,則該方法被調(diào)用。 舉例說明 1,、__get() 當(dāng)試圖讀取一個并不存在的屬性的時候被調(diào)用,。 如果試圖讀取一個對象并不存在的屬性的時候,PHP就會給出錯誤信息,。如果在類里添加__get方法,,并且我們可以用這個函數(shù)實(shí)現(xiàn)類似java中反射的各種操作。 class Test { public function __get($key) { echo $key . " 不存在"; } } $t = new Test(); echo $t->name; 就會輸出:name 不存在
class Test { public function __set($key, $value) { echo '對' . $key . "附值" . $value; } } $t = new Test(); $t->name = "aninggo"; 就會輸出:對 name 附值 aninggo
3、__call() 當(dāng)試圖調(diào)用一個對象并不存在的方法時,,調(diào)用該方法,。 class Test { public function __call($Key, $Args) { echo "您要調(diào)用的 {$Key} 方法不存在。你傳入的參數(shù)是:" . print_r($Args, true); } } $t = new Test(); $t->getName(aning, go); 程序?qū)敵觯?br style="margin: 0px; padding: 0px;">您要調(diào)用的 getName 方法不存在,。參數(shù)是:Array ( [0] => aning [1] => go )
4,、__toString() 當(dāng)打印一個對象的時候被調(diào)用,這個方法類似于java的toString方法,,當(dāng)我們直接打印對象的時候回調(diào)用這個函數(shù),。 class Test { public function __toString() { return "打印 Test"; } } $t = new Test(); echo $t; 運(yùn)行echo $t;的時候,,就會調(diào)用$t->__toString();從而程序?qū)敵觯?/span>打印 Test; 5,、__clone() 當(dāng)對象被克隆時,被調(diào)用,。 class Test { public function __clone() { echo "我被復(fù)制了,!"; } } $t = new Test(); $t1 = clone $t; 程序輸出:我被復(fù)制了! 二,、魔術(shù)常量(8個) 1,、__LINE__ 返回文件中的當(dāng)前行號。 2,、__FILE__ 返回文件的完整路徑和文件名,。如果用在包含文件中,則返回包含文件名,。自 PHP 4.0.2 起,,__FILE__ 總是包含一個絕對路徑,,而在此之前的版本有時會包含一個相對路徑。 3,、__DIR__ 文件所在的目錄,。如果用在被包括文件中,則返回被包括的文件所在的目錄,。它等價于 dirname(__FILE__),。除非是根目錄,否則目錄中名不包括末尾的斜杠,。(PHP 5.3.0中新增) 4,、__FUNCTION__ 返回函數(shù)名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該函數(shù)被定義時的名字(區(qū)分大小寫),。在 PHP 4 中該值總是小寫字母的,。 5、__CLASS__ 返回類的名稱(PHP 4.3.0 新加),。自 PHP 5 起本常量返回該類被定義時的名字(區(qū)分大小寫),。在 PHP 4 中該值總是小寫字母的。 6,、__TRAIT__ Trait 的名字(PHP 5.4.0 新加),。自 PHP 5.4 起此常量返回 trait 被定義時的名字(區(qū)分大小寫)。Trait 名包括其被聲明的作用區(qū)域(例如 Foo\Bar),。 7,、__METHOD__ 返回類的方法名(PHP 5.0.0 新加)。返回該方法被定義時的名字(區(qū)分大小寫),。 格式:類名::方法名 8,、__NAMESPACE__ 當(dāng)前命名空間的名稱(區(qū)分大小寫)。此常量是在編譯時定義的(PHP 5.3.0 新增) 三,、預(yù)定義常量 PHP_VERSION PHP 程序的版本,,如4.0.2
四,、PHP運(yùn)行環(huán)境檢測函數(shù)php_sapi_name()
參考:http:///manual/zh/reserved.constants.php |
|