PHP魔術方法總結

2021-06-27 06:00:42 字數 2247 閱讀 6674

php中的魔術方法都是以 __ 開頭的,具有特殊作用的一些方法,可以看做php的語法糖。

__construct

構造器是乙個魔術方法,當物件被例項化時它會被呼叫。在乙個類宣告時它常常是第一件做的事但是沒得必要他也像其他任何方法在類中任何地方都可以宣告,構造器也能像其他方法樣繼承。如:

/*** 構造方法示例,可以繼承重寫父類的構造方法**/

class test extends anotherclass

}__destruct

當我們使用完乙個物件時真不想把事情放一邊,因此析構方法做著與構造方法相反的事情。當物件被銷毀時,析構方法會執行,或者明確的說當我們不再使用它時,php會為我們清理掉。

/*** 析構方法示例**/

class test extends anotherclass

public function __destruct()

}__get 和 __set 方法

這組魔術方法是乙個非常靈巧的小技巧 - 它使實際上不存在的屬性如同存在一般。也就是當程式呼叫乙個不存在的屬性時會被呼叫。另外當呼叫物件中的私有屬性時也可以被呼叫。

class acount

return $this->$name;

}public function __set($name, $value)

}

__call 和 __callstatic 方法

如何防止呼叫乙個不存在的方法不會報錯?__call 和 __callstatic 可以很好的解決這個問題。

__call 方法原型如下:

mixed __call (string $name, array $arguments)

當呼叫乙個不存在的方法時,__call() 會被呼叫其中$name引數是要呼叫的方法名稱。$arguments 是引數陣列,包含著要傳遞給方法的引數。

class penguin extends animal

public function getpenguinfromdb($id)

public function __get($field)

}public function __set($field, $value)

}public function __call($method, $args)

}__sleep

__sleep()方法會被呼叫當物件被序列化後,並允許你處理序列化。這有各種各樣的程式,乙個很好的例子如果乙個物件包含某種型別的指標,例如檔案控制代碼或引用另乙個物件。當物件被序列化然後解序列化,這些引用型別是無用的,因為這些型別的引用的目標可能不再存在或有效。因此,最好是來取消這些資訊在儲存它們之前。

__wakeup

__wakeup()是與__sleep()方法相反的,允許您更改物件解序列化的行為。和__sleep()一起使用,可以用來恢復被刪除的控制代碼和物件當物件被序列化時。乙個很好的例子程式是資料庫控制代碼被取消設定當該項被序列化,然後恢復到當前配置中設定專案時,解序列化乙個資料庫控制代碼。

__clone

我們看過乙個使用clone關鍵字的例子,在我的介紹從入門到oop的第二部分,建立物件的副本,而不是有兩個變數指向同乙個實際的資料。在乙個類中重寫此方法,我們可以觀察發生了什麼當在物件上使用clone關鍵字時,。雖然這是不是我們每一天能遇到的,乙個漂亮的用例是建立乙個真正的單例模式通過新增private訪問修飾符給這個方法。

__tostring

_tostring方法是乙個非常方便的附加方法對於我們的工具包。該方法可以宣告覆蓋物件的行為,當作為乙個字串輸出時,例如,當它被輸出時。如果你想能輸出物件到模板中,你可以使用此方法來控制輸出結果。

class penguin

public function __tostring()

}在適當的位置,輸出該物件通過呼叫echo輸出它,如:

$tux = new penguin('tux');

echo $tux;

__invoke

__invoke的魔術方法,使用該方法就可以在建立例項後,直接呼叫物件。如下示例所示:

class testclass

}$n = new testclass;

$n();

執行結果為:

hello world。

PHP常用魔術方法總結

常用的魔術方法有 tostring call autoload clone get set isset unset 1.tostring 用於定義輸出物件引用時呼叫 常用於列印一些物件的資訊 必須有返回值 eg 有乙個 persion類 persion per new persion echo pe...

php魔術方法 總結2

從php5以後的版本,類就可以使用魔術方法了。php規定以兩個下劃線 開頭的方法都保留為魔術方法,所以建議大家函式名最好不用 開頭,除非是為了過載已有的魔術方法。目前php已有的魔術方法有 construct,destruct,call,get,set,isset,unset,sleep,wakeu...

PHP魔術方法使用總結

魔術方法是php物件導向中特有的特性。它們在特定的情況下被觸發,都是以雙下劃線開頭,你可以把它們理解為鉤子,利用模式方法可以輕鬆實現php物件導向中過載 overloading即動態建立類屬性和方法 魔術方法很多還是成對出現的,以下列出目前php中所有的模式方法。1.construct,destru...