《PHP應用:php 魔術方法詳解》要點:
本文介紹了PHP應用:php 魔術方法詳解,希望對您有用。如果有疑問,可以聯系我們。
PHP應用從PHP 5以后的版本,PHP中的類就可以使用魔術辦法了.其規定以兩個下劃線(__)開頭的辦法都保留為魔術辦法,所以建議大家函數名最好不用__開頭,除非是為了重載已有的魔術辦法.PHP 將所有以 _ _(兩個下劃線)開頭的類辦法保留為魔術辦法.
PHP應用__toString() 和__invoke()
PHP應用public string __toString ( void ):當對象被當做string使用時,這個辦法會被自動調用.此辦法必須返回一個字符串
代碼如下:
<?php
??? class Magic{
??????? public function? __tostring(){
??????????? return "hello world!";
??????? }
??? }
??? $obj = new Magic();
??? echo $obj;//hello world!
?>
PHP應用__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
?>
PHP應用__call()和__callStatic()
PHP應用__call():當對象拜訪不存在的方法名稱時,__call()方法會被自動調用
PHP應用__callStatic():當對象拜訪不存在的靜態方法名稱時,__callStatic()方法會被自動調用
PHP應用通過這兩個辦法,同一個辦法的名稱的調用可以對應不同的辦法實現
代碼如下:
<?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??
?>
PHP應用__get()和__set()
PHP應用在給不可拜訪屬性賦值時,__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
?>
PHP應用讀取不可拜訪屬性的值時,__get()會被調用
代碼如下:
<?php
class Magic{
PHP應用??? 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
?>
PHP應用__isset()和__unset()
PHP應用當對不可拜訪屬性調用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
?>
PHP應用以上便是8個php面向對象的魔術辦法的介紹與示例,希望對大家能有所幫助
歡迎參與《PHP應用:php 魔術方法詳解》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/14175.html