PHP 中的魔術方法

2021-07-16 15:03:17 字數 2233 閱讀 3510

1.__construct():此為構造方法,是物件建立完成後第乙個被物件自動呼叫的方法,通常使用該方法完成一些物件的初始化工作。

<?php

class person

function say()

function run()

} $person1 = new person("張三", "男", 20);

$person2 = new person("李四", "女");

$person3 = new person("王五");

$person1->say(); //名字:張三,性別:男,年齡:20

$person2->say(); //名字:李四,性別:女,年齡:1

$person3->say(); //名字:王五,性別:男,年齡:1

2.__destruct():此為析構方法,是物件在銷毀前最後乙個被物件自動呼叫的方法,通常使用該方法完成一些物件在銷毀前的清理工作。

<?php

class person

function say()

function run()

function __destruct()

} $person1 = new person("張三", "男", 20);

$person1 = null;

$person2 = new person("李四", "女", 30);

$person3 = new person("王五", "男", 40);

輸出結果為:

再見張三

再見王五

再見李四

因為物件的引用都是放在棧記憶體中的,由於棧的「後進先出」特點,所以先呼叫第三個物件的析構方法,後呼叫第二個物件的析構方法。

3.__set() 和 __get()

__set():該方法的作用是在程式執行過程中為私有的成員屬性(或者是不存在的屬性)設定值,不需要有任何返回值。該方法有兩個引數:乙個是需要傳入在為私有屬性設定值時的屬性名,乙個是需要傳入為屬性設定的值。

__get():該方法的作用是在程式執行過程中,通過它可以在物件的外部獲取私有成員屬性的值。有乙個引數,需要傳入在獲取私有屬性值時的屬性名,並返回乙個值,是在這個方法中處理後的允許物件外部使用的值。

4.__isset() 和 __unset()

__isset():當對不可訪問屬性呼叫 isset() 或 empty() 時,該函式被呼叫

__unset():當對不可訪問屬性呼叫 unset() 時,該函式被呼叫

5.__clone()

該方法是在物件轉殖是自動呼叫的,所以可以通過此方法對轉殖後的副本重新初始化。該方法不需要任何引數,方法中自動包含 $this 和 $that 兩個物件的引用,前者是副本物件的引用,後者是原本物件的引用。

6.__tostring()

該方法用於乙個類被當成字串是應該怎樣回應。例如 echo $obj; 應該顯示些什麼。此方法必須返回乙個字串,否則將傳送一條 e_recoverable_error 級別的致命錯誤。注意:不能再 __tostring() 方法中丟擲異常。這麼做會導致致命錯誤。

簡單例項:

<?php

// declare a ****** class

class testclass

public function __tostring()

}$class = new testclass('hello');

echo $class;

?>

輸出:hello

7.__call():當物件呼叫乙個不可訪問方法時,該方法會被呼叫。有兩個引數,分別是:要呼叫的方法名稱,乙個列舉陣列(包含著要傳遞給方法的引數)。

8.__autoload():該函式會在試圖使用尚未被定義的類時自動呼叫。通過呼叫此函式,指令碼引擎在 php 出錯失敗前有了最後乙個機會載入所需的類。

9.__sleep()  和 __wakeup()

__sleep(): 序列化時,serialize() 函式會檢查類中是否存在這個魔術方法 __sleep()。存在,則該方法會被先呼叫,然後才執行序列化操作。此功能可用於清理物件,並返回乙個包含物件中所有應被序列化的變數名稱的陣列。如果該方法未返回任何內容,則 null 被序列化,並產生乙個 e_notice 級別的錯誤。

注意:該方法不能返回父類的私有成員的名字。

__wakeup():反序列化時呼叫。

PHP中的魔術方法

php 將所有以 兩個下劃線 開頭的類方法保留為魔術方法。因此,在定義類方法時,除了下述魔術方法外,建議不要以 為字首。construct 構造方法或建構函式 具有建構函式的類會在每次建立新物件時,先呼叫此方法。因此,非常適合在使用物件之前做一些初始化操作。注意 如果子類中定義了建構函式則不會隱式呼...

PHP中的魔術方法

概述 在物件導向程式設計中,php提供了一系列的魔術方法,這些魔術方法為程式設計提供了很多便利。php中的魔術方法通常以 兩個下劃線 開始,並且不需要顯示的呼叫而是由某種特定的條件出發。這篇文章簡單總結了php中提供的魔術方法。開始之前 在總結php的魔術方法之前先來定義兩個類,以便後邊示例使用 複...

php中的魔術方法

參考文件 a.對不可訪問的物件賦值的時候 set b.讀取不可訪問的物件的時候 get c.對可以訪問的屬性呼叫 isset empty isset d.對不可訪問的物件調 unset unset e.構造方法 construct f.乙個物件被當成乙個字串返回的時候應該返回什麼 tostring ...