有些東西如果不是經常使用,很容易忘記,比如魔術方法
和魔術常量。
php中把以兩個下劃線__
開頭的方法稱為魔術方法,這些方法在php中充當了舉足輕重的作用。 魔術方法包括:
建構函式和析構函式應該不陌生,他們在物件建立和消亡時被呼叫。例如我們需要開啟乙個檔案,在物件建立時開啟,物件消亡時關閉
<?php
class
fileread
function
__destruct()}
?>
這兩個方法在繼承時可以擴充套件,例如:
<?php
class
tmpfileread
extends
fileread
function
__destruct()}
?>
在物件中呼叫乙個不可訪問方法時會呼叫這兩個方法,後者為靜態方法。這兩個方法我們在可變方法(variable functions)呼叫中可能會用到。
<?php
class
methodtest
public
static
function
__callstatic
($name, $arguments)
}$obj = new methodtest;
$obj->runtest('in object context');
methodtest::runtest('in static context');
?>
當get/set乙個類的成員變數時呼叫這兩個函式。例如我們將物件變數儲存在另外乙個陣列中,而不是物件本身的成員變數
<?php
class
methodtest
public
function
__get
($name)
public
function
__isset
($name)
public
function
unset
($name)
}?>
當我們在執行serialize()
和unserialize()
時,會先呼叫這兩個函式。例如我們在序列化乙個物件時,這個物件有乙個資料庫鏈結,想要在反序列化中恢復鏈結狀態,則可以通過重構這兩個函式來實現鏈結的恢復。例子如下:
<?php
class
connection
private
function
connect
() public
function
__sleep
() public
function
__wakeup()}
?>
物件當成字串時的回應方法。例如使用echo $obj;
來輸出乙個物件
<?php
// declare a ****** class
class
testclass
}$class = new testclass();
echo $class;
?>
這個方法只能返回字串,而且不可以在這個方法中丟擲異常,否則會出現致命錯誤。
呼叫函式的方式呼叫乙個物件時的回應方法。如下
<?php
class
callableclass
}$obj = new callableclass;
var_dump(is_callable($obj));
?>
呼叫var_export()
匯出類時,此靜態方法會被呼叫。
<?php
classa}
$a = new a;
$a->var1 = 5;
$a->var2 = 'foo';
var_dump(var_export($a));
?>
當物件複製完成時呼叫。例如在設計模式
詳解及php實現:單例模式一文中提到的單例模式實現方式,利用這個函式來防止物件被轉殖。
<?php
public
class
singleton
public
static
function
getinstance
() return
self::$_instance;
}// 防止轉殖例項
public
function
__clone()}
?>
php中的常量大部分都是不變的,但是有8個常量會隨著他們所在**位置的變化而變化,這8個常量被稱為魔術常量。
這些魔術常量常常被用於獲得當前環境資訊或者記錄日誌。
PHP魔術方法和魔術常量
具體的解釋如下 1。construct 例項化物件時被呼叫,當 construct和以類名為函式名的函式同時存在時,construct將被呼叫,另乙個不被呼叫。2。destruct 當刪除乙個物件或物件操作終止時被呼叫。3。call 物件呼叫某個方法,若方法存在,則直接呼叫 若不存在,則會去呼叫 c...
PHP魔術方法和魔術常量
具體的解釋如下 1。construct 例項化物件時被呼叫,當 construct和以類名為函式名的函式同時存在時,construct將被呼叫,另乙個不被呼叫。2。destruct 當刪除乙個物件或物件操作終止時被呼叫。3。call 物件呼叫某個方法,若方法存在,則直接呼叫 若不存在,則會去呼叫 c...
php魔術常量和魔術方法
1.概述 get 獲取私有屬性值的時候呼叫 set 設定私有屬性值的時候呼叫 construct 構造方法 destruct 析構方法 unset 觸發時機 當銷毀乙個私有成員屬性的時候呼叫 引數 屬性名 isset 觸發時機 當判斷乙個私有成員屬性是否被設定過時呼叫 引數 屬性名 invoke 了...