方法一:__contruct()
作用:在每次類被例項化的時候被呼叫
<?php
class
index
}$index= new index();
//執行結果 頁面顯示123
方法二:__call($function_name,$args)
作用:在物件中呼叫乙個不可訪問方法時呼叫
該方法有兩個引數 fu
ncti
onna
me:不
可訪問的
方法名稱
args : 對不可訪問的方法傳入的引數值
class
index
private
function
aa(){}
}$index= new index();
$index->aa(123,456,"111");
方法三 :__tostring()
作用 : 類被當成字串時的回應方法, 輸出的內容需要返回
<?php
class
index
}$index= new index();
echo
$index;
方法四 :__destruct()
作用 : 類的析構函式
析構方法允許在銷毀乙個類之前執行的一些操作或完成一些功能,比如說關閉檔案、釋放結果集等。
一般來說,析構方法在php中並不是很常用,它屬類中可選擇的一部分,通常用來完成一些在物件銷毀前的清理任務。
<?php
class
index
}$index= new index();
unset($index); //銷毀上面建立的物件$person
方法五 :__get()
作用 : 獲得乙個類的成員變數時呼叫
在 php 物件導向程式設計中,類的成員屬性被設定為 private 後,如果我們試圖在外面呼叫它則會出現「不能訪問某個私有屬性」的錯誤。那麼為了解決這個問題,我們可以使用魔術方法 __get()。
$fieldname : 不能直接方法的屬性名
<?php
class
index
}$index= new index();
echo
$index->name;
方法六:__set()
作用 : 設定乙個類的成員變數時呼叫
__set( pr
oper
ty, value )` 方法用來設定私有屬性, 給乙個未定義的屬性賦值時,此方法會被觸發,傳遞的引數是被設定的屬性名和值。
<?php
class
index
public
function
getname
()
}$index= new index();
$index->name = "譚勇";
echo
$index->getname();
方法七 :__isset()
作用 : 當對不可訪問屬性呼叫isset()或empty()時呼叫
在看這個方法之前我們看一下isset()函式的應用,isset()是測定變數是否設定用的函式,傳入乙個變數作為引數,如果傳入的變數存在則傳回true,否則傳回false。
那麼如果在乙個物件外面使用isset()這個函式去測定物件裡面的成員是否被設定可不可以用它呢?
分兩種情況,如果物件裡面成員是公有的,我們就可以使用這個函式來測定成員屬性,如果是私有的成員屬性,這個函式就不起作用了,原因就是因為私有的被封裝了,在外部不可見。那麼我們就不可以在物件的外部使用isset()函式來測定私有成員屬性是否被設定了呢?當然是可以的,但不是一成不變。你只要在類裡面加上乙個__isset()方法就可以了,當在類外部使用isset()函式來測定物件裡面的私有成員是否被設定時,就會自動呼叫類裡面的__isset()方法了幫我們完成這樣的操作。
__isset()的作用:當對不可訪問屬性呼叫 isset() 或 empty() 時,__isset() 會被呼叫。
<?php
class
index
}$index= new index();
if(isset($index->age))
方法八 :__unset()
作用 : 當對不可訪問屬性呼叫unset()時被呼叫。
看這個方法之前呢,我們也先來看一下 unset() 函式,unset()這個函式的作用是刪除指定的變數且傳回true,引數為要刪除的變數。
那麼如果在乙個物件外部去刪除物件內部的成員屬性用unset()函式可以嗎?
這裡自然也是分兩種情況:
1、 如果乙個物件裡面的成員屬性是公有的,就可以使用這個函式在物件外面刪除物件的公有屬性。
2、 如果物件的成員屬性是私有的,我使用這個函式就沒有許可權去刪除。
雖然有以上兩種情況,但我想說的是同樣如果你在乙個物件裡面加上__unset()這個方法,就可以在物件的外部去刪除物件的私有成員屬性了。在物件裡面加上了__unset()這個方法之後,在物件外部使用「unset()」函式刪除物件內部的私有成員屬性時,物件會自動呼叫__unset()函式來幫我們刪除物件內部的私有成員屬性。
<?php
class
index
}$index= new index();
unset($index->age);
方法九 :__sleep()
serialize() 函式會檢查類中是否存在乙個魔術方法 __sleep()。如果存在,則該方法會優先被呼叫,然後才執行序列化操作。
此功能可以用於清理物件,並返回乙個包含物件中所有應被序列化的變數名稱的陣列。
如果該方法未返回任何內容,則 null 被序列化,並產生乙個 e_notice 級別的錯誤。
注意:__sleep() 不能返回父類的私有成員的名字。這樣做會產生乙個 e_notice 級別的錯誤。可以用 serializable 介面來替代。
作用:__sleep() 方法常用於提交未提交的資料,或類似的清理操作。同時,如果有一些很大的物件,但不需要全部儲存,這個功能就很好用。
<?php
class
index
}$index= new index();
echo serialize($index);
方法十 :__wakeup()
作用 : 執行unserialize()時,先會呼叫這個函式
如果說 __sleep() 是白的,那麼 __wakeup() 就是黑的了。
那麼為什麼呢?
因為:與之相反,unserialize()
會檢查是否存在乙個__wakeup()
方法。如果存在,則會先呼叫__wakeup
方法,預先準備物件需要的資源。
作用:__wakeup() 經常用在反序列化操作中,例如重新建立資料庫連線,或執行其它初始化操作。
<?php
header("content-type:text/html;charset=utf-8");
class
index
public
function
__wakeup
()
}$index= new index();
$a = serialize($index);
$aindex = unserialize($a);
echo
$aindex->name;
方法十一 :__invoke()
作用 : 呼叫函式的方式呼叫乙個物件時的回應方法
當嘗試以呼叫函式的方式呼叫乙個物件時,__invoke() 方法會被自動呼叫。
注意:本特性只在 php 5.3.0 及以上版本有效。
<?php
header("content-type:text/html;charset=utf-8");
class
index
}$index= new index();
$index();
方法十二 :__clone()
作用:
物件複製可以通過 clone 關鍵字來完成(如果可能,這將呼叫物件的 __clone() 方法)。物件中的 __clone() 方法不能被直接呼叫。
語法:
$copy_of_object = clone
$object;
注意:
當物件被複製後,php 5 會對物件的所有屬性執行乙個淺複製(shallow copy)。所有的引用屬性 仍然會是乙個指向原來的變數的引用。
當複製完成時,如果定義了 __clone() 方法,則新建立的物件(複製生成的物件)中的 __clone() 方法會被呼叫,可用於修改屬性的值(如果有必要的話)。
<?php
header("content-type:text/html;charset=utf-8");
class
index
}$index= new index();
$index_1 = clone
$index;
php魔術常量,魔術方法
魔術常量 1。line 返回檔案中的當前行號。2。file 返回檔案的完整路徑和檔名。如果用在包含檔案中,則返回包含檔名。自php4.0.2 起,file 總是包含乙個絕對路徑,而在此之前的版本有時會包含乙個相對路徑。3。function 返回函式名稱 php4.3.0 新加 自php5 起本常量返...
invoke 魔術 PHP 魔術方法
php 魔術方法 構造方法 construct 析構方法 destruct get 與 set unset call 和 callstatic sleep 和 wakeup clone tostring invoke set state debuginfo construct 這個方法應該是最常用的...
php魔術方法
php5魔術方法 魔術函式 1。construct 建構函式 例項化物件時被呼叫,當 construct和以類名為函式名的建構函式同時存在時,construct將被呼叫,另乙個不被呼叫。2。destruct 析構函式 當刪除乙個物件或物件操作終止時被呼叫 程式結束後物件就摧毀 永遠都是最後執行的。3...