1. 程式人生 > >PHP的魔術方法與魔術常量

PHP的魔術方法與魔術常量

魔術常量

__LINE__   檔案中的當前行號。  
__FILE__   檔案的完整路徑和檔名。如果用在被包含檔案中,則返回被包含的檔名  
__DIR__   檔案所在的目錄。除非是根目錄,否則目錄中名不包括末尾的斜槓。
__FUNCTION__  返回該函式被定義時的名字(區分大小寫)。
__CLASS__   返回該類被定義時的名字(區分大小寫)。
__TRAIT__  常量返回 trait 被定義時的名字(區分大小寫)  
__METHOD__   返回該方法被定義時的名字(區分大小寫)。  
__NAMESPACE__   當前名稱空間的名稱(區分大小寫)。

魔術方法

<?php
Class Magicmethods { public $name = 'a'; public function __construct() { echo '__construct----##建立了一個物件'.'<br>'; } public function __destruct() { echo '__destruct----##'.$this->name.'釋放了一個物件'.'<br>'; } public function __set($name,$value
)
{
echo "__set----##設定的成員屬性{$name}等於{$value}不存在".'<br>'; } public function __get($name) { echo "__get----##獲取成員屬性{$name}不存在".'<br>'; } public function __isset($name) { echo "__isset----##isset({$name})成員屬性{$name}不存在".'<br>'; } public
function __unset($name) { echo "__unset----##unset({$name})成員屬性{$name}不存在".'<br>'; } public function __toString() { return "__toString----##當類被當成字串時的反應:我是一個類".__CLASS__.'<br>'; } public function __clone() { $this->name = 'b'; echo "__clone----##克隆出來的物件呼叫了此方法".__CLASS__.'<br>'; } public function __call($name, $aarguments) { echo "__call----##呼叫了一個不存在的方法{$name}".'<br>'; } public function __sleep() { echo "__sleep----##serialize()方法序列化呼叫此方法"."<br>"; return []; } public function __wakeup() { echo "__wakeup----##unserialize()方法序列化呼叫此方法"."<br>"; } public function __invoke($arg) { echo '__invoke----##當物件被當作函式呼叫'.$arg.'<br>'; } public static function __callStatic($name, $aarguments) { echo "__callStatic----##呼叫了一個不存在的靜態方法{$name}".'<br>'; } public function __set_state() { echo '__set_state----##var_export()匯出類方法呼叫了這個方法'.'<br>'; } public function __debugInfo() { echo '__debugInfo----##var_dump()顯示的內容'; } } $obj = new Magicmethods(); //呼叫__construct() $obj->a = 3; //呼叫__set() $obj->b; //呼叫__get(); isset($obj->c); //呼叫__isset empty($obj->c); //呼叫__isset unset($obj->c); //呼叫__unset echo $obj; //呼叫__toString $obj2 = clone $obj; //呼叫__clone $obj->test(); //呼叫__call() $str = serialize($obj); //呼叫__sleep() unserialize($str); //呼叫__wakeup $obj(5); //呼叫__invoke $obj::test(); //呼叫__callstatic var_export($obj); //呼叫__set_state echo '<br>'; var_dump($obj); //呼叫__debugInfo() echo '<br>';