php魔術常量介紹和魔術函數使用代碼說明總結

來源:互聯網
上載者:User
魔術常量

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 新加)。返回該方法被定義時的名字(區分大小寫)。

什麼是魔術函數?

對於開頭的函數就命名為魔術函數, 此類函數都在特定的條件下觸發的.比如: set() get()等
在設定或取不存在的屬性時候觸發.
有那些魔術函數呢?
總的來說, 有下面幾個魔術函數
construct() destruct() get() set() isset() unset() call() callStatic()
sleep() wakeup() toString() set_state() clone() autoload()
construct()當執行個體化一個對象的時候,這個對象的這個方法首先被調用。
destruct()當刪除一個對象或對象操作終止的時候,調用該方法。

class test1 { public function construct() { var_dump(function); } public function destruct() { var_dump(function); } } $t1 = new test1 ; unset($t1);

get當試圖讀取一個並不存在的屬性的時候被調用。
set當試圖向一個並不存在的屬性寫入值的時候被調用。
isset當試圖檢測一個並不存在的屬性時候被調用。
unset當試圖取消一個並不存在的屬性時候被調用。

class test2 { public $name3; public function set($key, $value) { var_dump(function. ' KEY:' .$key.' Value:' .$value); } public function get($key) { var_dump(function. 'KEY:'.$key); } public function isset($key) { var_dump(function. ' KEY:'.$key); } public function unset($key) { var_dump(function. ' KEY:'.$key); } } $t =new test2 ; $t->name = "steven"; $t->name2; $t->name3; isset($t->name2); isset($t->name3); unset($t->name4);

sleep當進行序列化對象時候調用
wakeup當進行反序列對象時候調用
需要注意一點:
1. sleep()必須返回一個數組或者對象(一般返回的是$this),返回的值將會被用來做為序列化的
值。
如果不返回這個值,則序列化失敗。這也意味著還原序列化將不會觸發wakeup事件。
2. 序列化會儲存預設賦值的屬性.如果要通過執行個體化賦值的內容,則需要屬性在sleep()返回數組的
指定.
如$id與$id2的區別.

class test3 { public $name = "steven"; public $id = "1"; public $id2; public function sleep() { var_dump(function); // 序列化不成功.沒有傳回值.反序列也失敗 // return array("name"); // 序列化成功.有傳回值.反序列成功.id2屬效能被恢複 // return array("name", "id2");// 序列化成功.有傳回值.反序列成功.id2屬性不能被恢複 return array("name"); } public function testEcho() { var_dump($this->name); var_dump($this->id); var_dump($this->id2); } public function wakeup() { var_dump(function); $this->testEcho(); } } $t3= new test3 ; $t3->id2 = uniqid(); $t3s = serialize($t3); unserialize($t3s);

toString當直接列印一個對象的時候,這個方法將會被調用

class test4 { public function toString() { return "toString"; } } $t4 = new test4(); echo $t4; print $t4; var_dump($t4); print_r($t4);


call($func, $param) 當嘗試調用一個不存在的方法的時候被調用.
這個方法必須有兩個參數,第一個為調用的方法名,第二個是一個被呼叫者法的參數數組。
需要注意的是,當你在一個子類調用父類的private的方法,或者在執行個體裡調用類的非protect方法的
時候,並不會調用call()

class test5 { public function call($func, $param) { var_dump('Function:'.$func); var_dump($param); } } $t5 = new test5; $t5->echoTest('xx','xx','xx');


callStatic()當嘗試調用一個不存在的靜態方法的時候被調用
這個方法必須有兩個參數,第一個為調用的方法名,第二個是一個被呼叫者法的參數數組。
在PHP5.3中出現

class test51 { public function callStatic($fun, $param) { var_dump('Function:'.$func); var_dump($param); } } test51::test('xx','xx','xx');

set_state()當用var_export匯出執行個體的時候被調用.此方法有一個參數,為包含所匯出的執行個體的所
有成員屬性的一個數組

class test6 { public function set_state($arr){ var_dump($arr); } } $t6 = new test6; $t6->age = "12"; var_export($t6, true); var_export($t6); eval(' $b=' .var_export($t6,true).';'); print_r($b);

clone()當複製執行個體時候被調用.
注意:
1.在php5裡,對象間的賦值總是以地址引用來傳遞的.
2.如果要以實際值來傳遞,則需要用到clone關鍵詞
3.clone的只是執行個體。如果執行個體中的某個成員屬性也是個執行個體,那麼這個成員屬性還是會以引用方法被
傳遞到新的執行個體。
// 對象間的賦值總是以地址引用來傳遞的. $t71 $t72的age屬性是一樣的.

class test71 { public $age = 10; } $t71 = new test71(); $t72 = $t71 ; var_dump($t71->age) ; $t71->age =12 ; var_dump($t71->age) ; var_dump($t72->age) ; // 如果要以實際值來傳遞,則需要用到clone關鍵詞 $t73 = clone $t71; $t71->age = 13 ; var_dump($t71->age) ; var_dump($t73->age) ; // 如果執行個體中的某個成員屬性也是個執行個體,那麼這個成員屬性還是會以引用方法被傳遞到新的執行個體。

autoload()函數.當建立一個執行個體化的時候,如果對應的類不存在,則會被調用

function autoload($class) {    if ( $class == "test8" ){ require_once dirname(FILE).'/class8.php';  } } spl_autoload(); $t8 = new test8; var_dump($t8->age);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.