php 魔術方法詳解,php魔術詳解_PHP教程

來源:互聯網
上載者:User

php 魔術方法詳解,php魔術詳解


從PHP 5以後的版本,PHP中的類就可以使用魔術方法了。其規定以兩個底線(__)開頭的方法都保留為魔術方法,所以建議大家函數名最好不用__開頭,除非是為了重載已有的魔術方法。PHP 將所有以 _ _(兩個底線)開頭的類方法保留為魔術方法。

__toString() 和__invoke()

public string __toString ( void ):當對象被當做string使用時,這個方法會被自動調用。此方法必須返回一個字串

複製代碼 代碼如下:
<?php
class Magic{
public function __tostring(){
return "hello world!";
}
}
$obj = new Magic();
echo $obj;//hello world!
?>

__invoke():當對象被當成方法調用時,這個方法會被自動調用。

複製代碼 代碼如下:
<?php
class Magic{
public function __tostring(){
return "hello world!";
}
public function __invoke($x){
echo "__invoke called with param ".$x."\n";
}
}
$obj = new Magic();
$obj(10);//__invoke called with param 10
?>

__call()和__callStatic()

__call():當對象訪問不存在的方法名稱時,__call()方法會被自動調用

__callStatic():當對象訪問不存在的靜態方法名稱時,__callStatic()方法會被自動調用

通過這兩個方法,同一個方法的名稱的調用可以對應不同的方法實現

複製代碼 代碼如下:
<?php
class Magic{
//`$name` 參數是要調用的方法名稱。`$arguments` 參數是一個枚舉數組,
//包含著要傳遞給方法 `$name` 的參數。
public function __call($name,$arguments){
//implode() 函數把數組元素組合為一個字串。implode(separator,array)
echo "Calling " . $name ." with param: ".implode(", ",$arguments)."\n";
}
}
$obj = new Magic();
$obj->run("para1","para2");//obj去調用run方法,輸出:Calling run with param: para1, para2
?>

__get()和__set()

在給不可訪問屬性賦值時,__set()會被調用
讀取不可訪問屬性的值時,__get()會被調用

複製代碼 代碼如下:
<?php
class Magic{
//function 前要有static關鍵字
public function __get($name){
return "Getting the property " . $name;
}
}
$obj = new Magic();
echo $obj->className."\n";//Getting the property className
?>

讀取不可訪問屬性的值時,__get()會被調用

複製代碼 代碼如下:
<?php
class Magic{

public function __set($name,$value){
echo "Setting the property " . $name ."to value ". $value ."\n";
}
}
$obj = new Magic();
$obj->className = 'MagicClass';//Setting the property classNameto value MagicClass
?>

__isset()和__unset()

當對不可訪問屬性調用isset()或empty()時,__isset()會被調用
當對不可訪問屬性調用unset()時,__unset()會被調用

複製代碼 代碼如下:
<?php
class Magic{
public function __isset($name){
echo "__isset invoked\n";
return true;
}
}
$obj = new Magic();
echo '$obj->className is set?'.isset($obj->className)."\n";//__isset invoked $obj->className is set?1
?>

以上便是8個php物件導向的魔術方法的介紹與樣本,希望對大家能有所協助

http://www.bkjia.com/PHPjc/909341.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/909341.htmlTechArticlephp 魔術方法詳解,php魔術詳解 從PHP 5以後的版本,PHP中的類就可以使用魔術方法了。其規定以兩個底線(__)開頭的方法都保留為魔術方法...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.