ホームページ >バックエンド開発 >PHPの問題 >PHP の __set メソッドと __get メソッドとその応用シナリオの詳細な説明

PHP の __set メソッドと __get メソッドとその応用シナリオの詳細な説明

PHPz
PHPzオリジナル
2023-03-31 09:10:481569ブラウズ

PHP には、メンバー属性の読み取りおよび書き込み操作を制御するために使用される 2 つの非常に便利なマジック メソッド (__set および __get) があります。この記事では、これら 2 つのマジック メソッドの使用法と、PHP でのそれらのアプリケーション シナリオについて詳しく説明します。

__set メソッド

存在しないプロパティ、またはアクセスできないプロパティに値を割り当てると、PHP は自動的に __set メソッドを呼び出します。例:

class Person {
    private $name;

    public function __set($key, $value) {
        if ($key == 'name') {
            $this->name = $value;
        }
    }
}

$person = new Person();
$person->name = 'Lucas';

上の例では、クラス Person を作成し、クラス内にプライベート プロパティ $name を定義しました。また、渡された $key に基づいて設定する属性値を決定する __set メソッドも定義します。 $key が 'name' と等しい場合、渡された値が $name 属性に割り当てられます。

$person オブジェクトを作成し、それに name 属性の値を設定します。このプロパティはプライベートであるため、直接アクセスすることはできません。ただし、$person->name を通じて値を割り当てると、実際には __set メソッドが自動的に呼び出されます。

__get メソッド

__set メソッドと比較して、__get メソッドの方がよく使用されます。存在しない、またはアクセスできないプロパティの値を読み取ろうとすると、PHP は自動的に __get メソッドを呼び出します。例:

class Person {
    private $name;

    public function __get($key) {
        if ($key == 'name') {
            return $this->name;
        }
    }
}

$person = new Person();
echo $person->name;

上の例では、渡された $key に基づいて取得する属性値を決定する __get メソッドを定義しました。 $key が 'name' と等しい場合、$name 属性の値を返します。

$person オブジェクトを作成し、その name 属性の値を読み取ってみます。このプロパティはプライベートであるため、直接アクセスすることはできません。ただし、$person->name を通じてその値を取得すると、実際には __get メソッドが自動的に呼び出されます。

アプリケーション シナリオ

__set メソッドと __get メソッドを使用して、メンバー属性の読み取りおよび書き込み操作を制御できます。これは、コード、特にプライベート プロパティのアクセス制御とデータ検証を必要とするコードで非常に役立ちます。

以下は、__set メソッドと __get メソッドを使用してユーザーの名前と年齢属性の読み取りおよび書き込み操作を制御する User という名前の単純なクラスです。

class User {
    private $name;
    private $age;

    public function __set($key, $value) {
        switch ($key) {
            case 'name':
                $this->setName($value);
                break;
            case 'age':
                $this->setAge($value);
                break;
        }
    }

    public function __get($key) {
        switch ($key) {
            case 'name':
                return $this->name;
                break;
            case 'age':
                return $this->age;
                break;
        }
    }

    private function setName($name) {
        if (!is_string($name)) {
            throw new InvalidArgumentException('name must be a string');
        }

        $this->name = $name;
    }

    private function setAge($age) {
        if (!is_int($age)) {
            throw new InvalidArgumentException('age must be an integer');
        }

        $this->age = $age;
    }
}

$user = new User();
$user->name = 'Lucas';
$user->age = 26;

echo $user->name;
echo $user->age;

上の例では、次のように作成しました。 User クラスとその中に __set メソッドと __get メソッドを実装しました。また、ユーザーが入力した名前と年齢の属性の有効性をチェックするためのプライベート メソッド setName および setAge も定義します。

name 属性と age 属性に値を割り当てると、__set メソッドが自動的に呼び出されます。 __set メソッドでは、$key の値に基づいて代入操作を setName メソッドまたは setAge メソッドに委任します。

名前と年齢の属性を読み取ろうとすると、__get メソッドが自動的に呼び出されます。 __get メソッドでは、$key の値に基づいて、対応する属性値を取得します。

概要

__set メソッドと __get メソッドは、PHP 言語の 2 つの非常に便利なマジック メソッドです。これらは、特にアクセス制御とプライベート プロパティのデータ検証を必要とするコードで、メンバー プロパティの読み取りと書き込みを制御するために使用できます。読者の役に立つことを願って、いくつかのサンプル コードを通じてこれら 2 つのメソッドの基本的な使用法と応用シナリオをマスターしました。

以上がPHP の __set メソッドと __get メソッドとその応用シナリオの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。