ホームページ > バックエンド開発 > PHPの問題 > PHP マジックメソッド __get() と __set() の使用方法

PHP マジックメソッド __get() と __set() の使用方法

青灯夜游
リリース: 2023-03-11 09:54:01
オリジナル
1986 人が閲覧しました

「__set()」は、未定義の属性に値を割り当てるときに自動的に呼び出されます。構文は「public function __set(key,value){}」です。未定義の属性が割り当てられたときに「__get()」が呼び出されます。構文「public function __get(name){}」が呼び出されます。

PHP マジックメソッド __get() と __set() の使用方法

このチュートリアルの動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター

PHP のマジック メソッドは通常、次で始まります。 __(2 つのアンダースコアで始まります) 明示的に呼び出す必要はありませんが、特定の条件下で自動的に呼び出されます。

#Magic メソッドFunction__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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート