首頁 >後端開發 >PHP問題 >php魔術方法__get()和__set()怎麼用

php魔術方法__get()和__set()怎麼用

青灯夜游
青灯夜游原創
2021-07-06 17:57:291981瀏覽

“__set()”在給未定義的屬性賦值時自動調用,語法“public function __set(key,value){}”;“__get()”在調用未定義的屬性時調用,語法“public function __get(name){}”。

php魔術方法__get()和__set()怎麼用

本教學操作環境:windows7系統、PHP7.1版,DELL G3電腦

PHP 中的魔術方法通常以__(兩個下劃線)開始,並且不需要明確的調用而是在某種特定條件下自動調用的。

魔術方法 作用
#__set() 在給未定義的屬性賦值時自動呼叫
__get() 呼叫未定義的屬性時自動呼叫

##1、__set() 方法

在為目前環境下未定義或不可見的類別屬性賦值時,會自動呼叫__set() 方法。定義此方法的語法格式如下:

public function __set($key, $value){
    ... ... ;
}

其中,參數 $key 是要操作的變數名稱,$value 為變數 $key 的值。 ######【範例】下面使用簡單的範例來示範一下 __set() 方法的使用。 ###
<?php
    class Website{
        public $name;
        private $url;
        public function __set($key, $value){
            echo &#39;为“&#39;.$key.&#39;”赋值“&#39;.$value.&#39;”失败!<br>&#39;;
        }
    }
    $object          = new Website();
    $object -> name  = &#39;php中文网&#39;;
    $object -> url   = &#39;https://www.php.cn/&#39;;
    $object -> title = &#39;PHP教程&#39;;
?>
###運行結果如下:###
为“url”赋值“https://www.php.cn/”失败!
为“title”赋值“PHP教程”失败!
###利用__set() 方法的特性,我們可以透過__set() 方法為類別中的使用private 關鍵字修飾的屬性進行賦值或修改。如下所示:###
<?php
    class Website{
        public $name;
        private $url = &#39;&#39;;
        public function __set($key, $value){
            if(isset($this->$key)){
                $this -> $key = $value;
            }else{
                echo &#39;为“&#39;.$key.&#39;”赋值“&#39;.$value.&#39;”失败!<br>&#39;;
            }
        }
        public function getUrl(){
            echo $this -> url;
        }
    }
    $object          = new Website();
    $object -> name  = &#39;php中文网&#39;;
    $object -> url   = &#39;https://www.php.cn/&#39;;
    $object -> title = &#39;PHP教程&#39;;
    $object -> getUrl();
?>
###運行結果如下:###
为“title”赋值“PHP教程”失败!
https://www.php.cn/
######2、__get() 方法#########在呼叫或取得目前環境下未定義或當不可見的類別屬性時,會自動呼叫__get() 方法,定義該方法的語法格式如下:###
public function __get($name){
    ... ... ;
}
###參數$name 為要操作的變數名稱。 ######【範例】下面使用簡單的範例來示範一下 __get() 方法的使用。 ###
<?php
    class Website{
        public $url = &#39;https://www.php.cn/&#39;;
        private $name = &#39;php中文网&#39;;
        public function __get($name){
            echo &#39;获取:“&#39;.$name.&#39;”失败!&#39;;
        }
    }
    $object = new Website();
    echo $object -> url.&#39;<br>&#39;;
    echo $object -> name.&#39;<br>&#39;;
    echo $object -> title.&#39;<br>&#39;;
?>
###運行結果如下:###
https://www.php.cn/
获取:“name”失败!
获取:“title”失败!
###推薦學習:《###PHP影片教學###》###

以上是php魔術方法__get()和__set()怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn