中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中get和set魔術方法的使用

發布時間:2020-06-01 22:01:57 來源:億速云 閱讀:359 作者:鴿子 欄目:編程語言

__get()魔術方法的用法

案例一、

實踐目標:

1、PHP中__get的定義格式如下:public function __get(參數1) ,這里注意必須是2個__,名稱必須是__get,而且必須是要帶1個參數,多一個少一個都不行

具體代碼如下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    // static public function staticFun(){
    //     echo "Animal中的staticFun執行了<br/>";
    // }
    //魔術方法  
    public  function __get($name){
        echo "自動執行了Animal類中的__get方法,當前屬性為:{$name}<br/>";
    }
}
$ani = new Animal();
?>

運行結果為:

未報錯,說明語法正確

現在我們 多加個參數看下

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    // static public function staticFun(){
    //     echo "Animal中的staticFun執行了<br/>";
    // }
    //魔術方法  
    public  function __get($name,$arg){
        echo "自動執行了Animal類中的__get方法,當前屬性為:{$name}<br/>";
    }
}
$ani = new Animal();
$name = $ani->name;
?>

運行結果為:

Fatal error: Method Animal::__get() must take exactly 1 argument in D:\E-class\class-code\classing\index.php on line 14

所以從結果可以看出,參數有且只能有一個,多一個少一個都不行

案例二、

實踐目標:

1、當調用不存在的屬性時,系統會自動觸發對象所在類的定義好的__get方法

具體代碼如下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    // static public function staticFun(){
    //     echo "Animal中的staticFun執行了<br/>";
    // }
    //魔術方法  
    public  function __get($name){
        echo "自動執行了Animal類中的__get方法,當前屬性為:{$name}<br/>";
    }
}
$ani = new Animal();
$name = $ani->name;
?>

運行結果如下:

自動執行了Animal類中的__get方法,當前屬性為:name

我們發現其實我們沒有手動的去調用__get方法,就是說沒有寫成$ani->__get(),但是這個方法依然執行了,因為什么呢?因為我們寫了$ani->name;而這個name方法沒有在類中定義,然后這個類中又定義了這個魔術方法,所以它就像魔術一樣,突然就被自動執行了,而且我們__get中的參數就是這個屬性

這里一定要注意,是2個下劃線,不是一個,否則就不是魔術方法了,下面還是再來做下測試

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    // static public function staticFun(){
    //     echo "Animal中的staticFun執行了<br/>";
    // }
    //魔術方法  試著少寫一個_
    public  function _get($name){
        echo "自動執行了Animal類中的__get方法,當前屬性為:{$name}<br/>";
    }
}
$ani = new Animal();
$name = $ani->name;
?>

運行結果如下:

Notice: Undefined property: Animal::$name in D:\E-class\class-code\classing\index.php on line 18

所以此刻就會報錯了,因為沒有__get的魔術方法了,所以一定要注意是2個下劃線,就好像構造函數和析構函數一樣,都是兩個下劃線

__set()魔術方法的用法


案例一、

實踐目標:

1、PHP中__set在類中定義格式如下  public function __set(屬性參數1,屬性對應的值的參數2),這里注意必須是2個__,名稱必須是__set,而且必須是要帶2個參數,多一個少一個都不行

具體代碼如下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔術方法  
    public  function __set($name,$val){
        echo "自動執行了Animal類中的__set方法,當前屬性為:{$name},值為:{$val}<br/>";
    }
}
$ani = new Animal();

?>

運行結果為:

空白,說明沒有報錯

接下來,我們少一個參數看下

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔術方法  
    public  function __set($name){
        echo "自動執行了Animal類中的__set方法,當前屬性為:{$name},值為:{$val}<br/>";
    }
}
$ani = new Animal();

?>

運行結果為:

Fatal error: Method Animal::__set() must take exactly 2 arguments in D:\E-class\class-code\classing\index.php on line 11

所以__set方法的參數有且只能是2個,一個是屬性名,一個是屬性要設置的值

案例二、

實踐目標:

1、當設置不存在的屬性時,系統會自動觸發對象所在類的定義好的__set方法

具體代碼如下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔術方法  
    public  function __set($name,$val){
        echo "自動執行了Animal類中的__set方法,當前屬性為:{$name},值為:{$val}<br/>";
    }
}
$ani = new Animal();
$ani->name = "小狗";

?>

運行結果為:

自動執行了Animal類中的__set方法,當前屬性為:name,值為:小狗

我們發現其實我們沒有手動的去調用__set方法,也就是說沒有寫成$ani->__set(),但是這個方法依然執行了,因為什么呢?因為我們寫了$ani->name = "小狗";;這個name屬性在類中沒有定義,然后這個類中又定義了這個魔術方法,所以它就像魔術一樣,突然就被自動執行了

這里一定要注意,是2個下劃線,不是一個,否則就不是魔術方法了,下面還是再來做下測試

具體代碼如下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔術方法  試著少寫一個_
    public  function _set($name,$val){
        echo "自動執行了Animal類中的__sett方法,當前屬性為:{$name},值為:{$val}<br/>";
    }
}
$ani = new Animal();
$ani->name = "小狗";

?>

運行結果如下:

空白了

所以說明沒有執行__set魔術方法了,所以一定要記得是兩個__。

以上就是PHP魔術方法之__get,__set詳解(代碼實例)的詳細內容,更多請關注億速云其它相關文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

台安县| 通榆县| 广元市| 达尔| 华坪县| 开阳县| 济宁市| 囊谦县| 新乡县| 周至县| 蓬莱市| 灵武市| 安义县| 江达县| 康平县| 建瓯市| 阆中市| 碌曲县| 海林市| 蒙城县| 沂源县| 化州市| 钦州市| 县级市| 台北市| 当雄县| 西昌市| 大竹县| 周宁县| 鄂托克旗| 北京市| 门头沟区| 高碑店市| 吐鲁番市| 泸定县| 上饶县| 裕民县| 淮阳县| 寿阳县| 百色市| 定州市|