在物件導向程式設計中,php 提供了一系列的魔術方法,這些魔術方法為程式設計提供了很多便利,在 php 中的作用是非常重要的。php 中的魔術方法通常以__(兩個下劃線)開始,並且不需要顯式的呼叫而是在某種特定條件下自動呼叫的。
前面我們介紹的建構函式 __construct 和析構函式 __destruct 就屬於 php 中的魔術方法。php 中的魔術方法如下表所示:
魔術方法
作用__construct()
例項化類時自動呼叫
__destruct()
類物件使用結束時自動呼叫
__set()
在給未定義的屬性賦值時自動呼叫
__get()
呼叫未定義的屬性時自動呼叫
__isset()
使用 isset() 或 empty() 函式時自動呼叫
__unset()
使用 unset() 時自動呼叫
__sleep()
使用 serialize 序列化時自動呼叫
__wakeup()
使用 unserialize 反序列化時自動呼叫
__call()
呼叫乙個不存在的方法時自動呼叫
__callstatic()
呼叫乙個不存在的靜態方法時自動呼叫
__tostring()
把物件轉換成字串時自動呼叫
__invoke()
當嘗試把物件當方法呼叫時自動呼叫
__set_state()
當使用 var_export() 函式時自動呼叫,接受乙個陣列引數
__clone()
當使用 clone 複製乙個物件時自動呼叫
__debuginfo()
使用 var_dump() 列印物件資訊時自動呼叫
前面我們已經介紹過了《建構函式》和《析構函式》,下面我們再來介紹幾個常用的魔術方法。
1、__set() 方法
在為當前環境下未定義或不可見的類屬性賦值時,會自動呼叫 __set() 方法。定義該方法的語法格式如下:
public function __set($key, $value)elseelseelse{
echo '成員屬性:「'.$name.'」不存在!
';$object = new website();
unset($object->url);
unset($object->name);
unset($object->abc);
執行結果如下:
移除成員屬性:「name」成功!
成員屬性:「abc」不存在!
5、__call() 方法
當呼叫類中乙個不可訪問或不存在的方法時,__call() 方法會被呼叫。該方法的語法格式如下:
public function __call($name, $arguments){
其中,$name 為要呼叫的方法名稱,$arguments 為傳遞給 $name 的引數所組成的陣列。
當呼叫的方法不存在時會自動呼叫 __call() 方法,程式會繼續執行下去,從而可以避免當呼叫方法不存在時產生錯誤所導致的程式終止。
【示例】下面使用簡單的示例來演示一下 __call() 方法的使用。
class website{
public function say(){
echo 'welcome c語言中文網!
';public function __call($name, $arguments){
echo '你所呼叫的方法:'.$name;
if(!empty($arguments)){
echo '【以及引數:';
print_r($arguments);
echo '】';
echo ' 不存在!
';$obj = new website();
$obj -> say();
$obj -> url('');
$obj -> title();
執行結果如下:
welcome c語言中文網!
你所呼叫的方法:url【以及引數:array ( [0] => ) 】 不存在!
你所呼叫的方法:title 不存在!
6、__clone() 方法
可以使用 clone 關鍵字複製物件,當複製完成時,如果定義了 __clone() 方法,則新建立的物件(複製生成的物件)中的 __clone() 方法會被自動呼叫,通過該方法我們可以做一些必要的操作。__clone() 方法的語法格式如下:
public function __clone(){
該函式不需要傳入引數。
【示例】下面使用簡單的示例來演示一下 __clone() 方法的使用。
class website{
public function say(){
echo 'welcome c語言中文網!
';public function __clone(){
echo '物件轉殖成功
';$obj = new website();
$obj2 = clone $obj;
echo '
';var_dump($obj, $obj2);
執行結果如下:
物件轉殖成功
object(website)#1 (0) {
object(website)#2 (0) {
魔術方法 python python的魔術方法
什麼叫魔術方法 在python中定義以雙下劃線開頭,有一些python自定義的函式,並且以雙下劃線為結尾的函式叫做魔法函式 classcompany object def init self,employee list self.employee employee listdef getitem s...
python魔術方法call php魔術方法
call是魔術方法中的乙個,當程式呼叫到當前類中未宣告或沒許可權呼叫的方法時,就會呼叫 call方法 class test public function emptyfunc getargs func get args funcname getargs 0 params array slice ge...
php魔術常量,魔術方法
魔術常量 1。line 返回檔案中的當前行號。2。file 返回檔案的完整路徑和檔名。如果用在包含檔案中,則返回包含檔名。自php4.0.2 起,file 總是包含乙個絕對路徑,而在此之前的版本有時會包含乙個相對路徑。3。function 返回函式名稱 php4.3.0 新加 自php5 起本常量返...