溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php的魔術(shù)方法詳解

發(fā)布時(shí)間:2021-09-01 22:43:30 來源:億速云 閱讀:129 作者:chen 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“php的魔術(shù)方法詳解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“php的魔術(shù)方法詳解”吧!

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

__toString() 和__invoke()

public string __toString ( void ):當(dāng)對(duì)象被當(dāng)做string使用時(shí),這個(gè)方法會(huì)被自動(dòng)調(diào)用。此方法必須返回一個(gè)字符串

復(fù)制代碼 代碼如下:


<?php
    class Magic{
        public function  __tostring(){
            return "hello world!";
        }
    }
    $obj = new Magic();
    echo $obj;//hello world!
?>

__invoke():當(dāng)對(duì)象被當(dāng)成方法調(diào)用時(shí),這個(gè)方法會(huì)被自動(dòng)調(diào)用。

復(fù)制代碼 代碼如下:


<?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():當(dāng)對(duì)象訪問不存在的方法名稱時(shí),__call()方法會(huì)被自動(dòng)調(diào)用

__callStatic():當(dāng)對(duì)象訪問不存在的靜態(tài)方法名稱時(shí),__callStatic()方法會(huì)被自動(dòng)調(diào)用

通過這兩個(gè)方法,同一個(gè)方法的名稱的調(diào)用可以對(duì)應(yīng)不同的方法實(shí)現(xiàn)

復(fù)制代碼 代碼如下:


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

__get()和__set()

在給不可訪問屬性賦值時(shí),__set()會(huì)被調(diào)用
讀取不可訪問屬性的值時(shí),__get()會(huì)被調(diào)用

復(fù)制代碼 代碼如下:


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

讀取不可訪問屬性的值時(shí),__get()會(huì)被調(diào)用

復(fù)制代碼 代碼如下:


<?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()

當(dāng)對(duì)不可訪問屬性調(diào)用isset()或empty()時(shí),__isset()會(huì)被調(diào)用
當(dāng)對(duì)不可訪問屬性調(diào)用unset()時(shí),__unset()會(huì)被調(diào)用

復(fù)制代碼 代碼如下:


<?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
?>

到此,相信大家對(duì)“php的魔術(shù)方法詳解”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI