ホームページ  >  記事  >  バックエンド開発  >  PHPでの__getメソッドの使用法は何ですか

PHPでの__getメソッドの使用法は何ですか

王林
王林オリジナル
2020-11-04 09:19:594323ブラウズ

php の __get メソッドの役割: プライベート メンバーの属性値を取得するために使用されます。 __get メソッドは手動で呼び出す必要がないため、このメソッドをプライベート メソッドにして、プライベート プロパティを取得するときにオブジェクトによって自動的に呼び出されます。

PHPでの__getメソッドの使用法は何ですか

# 一般的に、クラスの属性は常にプライベートとして定義します。これは、より現実的なロジックに沿ったものです。ただし、属性の読み取りと代入の操作は非常に頻繁に行われるため、PHP5 では、属性を取得および代入するための 2 つの関数「__get()」と「__set()」があらかじめ定義されています。これは Java での Javabean の操作に似ており、使用されるメソッドも同様ですが、Javabean のように各フィールドで set および get 操作を実行する必要がない点が異なります。 2 つの魔法のメソッドを追加するだけです。つまり、プライベートメンバーの値を設定・取得する操作です。

(推奨チュートリアル: php ビデオ チュートリアル)

PHP5 では、属性の値を設定および取得するための特別なメソッド「__set()」が提供されています。および 2 つのメソッド "__get()" はデフォルトでは存在しませんが、手動でクラスに追加されます。コンストラクター メソッド (__construct()) と同様に、これらはクラスに追加された場合にのみ存在します。これらのメソッドの追加を押すことができます。

//__set() 方法用来设置私有属性
    public function __set($name,$value){
        $this->$name = $value;
    }
    
//__get() 方法用来获取私有属性
    public function __get($name){
        return $this->$name;
    }

__get() メソッド: このメソッドは、プライベート メンバーの属性値を取得するために使用されます。パラメータが 1 つと、パラメータが渡されます。取得したいメンバー属性の名前は、取得した属性値を返します。このメソッドを手動で呼び出す必要がないため、このメソッドをオブジェクトによって自動的に呼び出されるプライベート メソッドにすることもできますprivate 属性を直接取得する場合。

プライベートプロパティはカプセル化されているため、値を直接取得することはできませんが、このメソッドをクラスに追加すると、「echo$p1->name」などの文で直接取得できます。 " 値が設定されると、__get($name) メソッドが自動的に呼び出され、属性名がパラメーター $name に渡されます。このメソッドの内部実行を通じて、渡したプライベート属性の値が返される。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。

__set() メソッド: このメソッドはプライベート メンバー属性の値を設定するために使用されます。これには 2 つのパラメーターがあります。最初のパラメーターは値を設定する属性の名前で、2 番目のパラメーターは値を設定する属性の名前です。パラメータは設定する属性です。値を設定します。戻り値はありません。このメソッドも手動で呼び出す必要はなく、プライベートにすることもでき、private 属性値が直接設定された場合に自動的に呼び出されます。

同じプライベート属性がカプセル化されています。__set() メソッドがない場合、これは許可されません。例: $this->name= ' zhangsan ' ではエラーが発生しますが、クラスに __set($property_name, $value) メソッドを追加します プライベートプロパティに直接値を代入する場合は自動的に呼び出されます $property_name に name などの属性を渡し、値を渡す" zhangsan " $value を割り当て、このメソッドを実行することで割り当ての目的が達成されます。

メンバー プロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。不正な値を渡さないように、このメソッドで判定することもできます。

コードは次のとおりです:

<?php
class  Person
{
// 下面是人的成员属性,都是封装的私有成员
private $ name ;       // 人的名子
private $ sex ;        // 人的性别
private $ age ;        // 人的年龄
//__get() 方法用来获取私有属性
private function  __get( $ property_name )
{
echo  " 在直接获取私有属性值的时候,自动调用了这个 __get() 方法 <br>" ;
if ( isset ( $ this -> $ property_name ))
{
return ( $ this -> $ property_name );
}
else
{
return ( NULL );
}
}
//__set() 方法用来设置私有属性
private function  __set( $ property_name ,  $ value )
{
echo  " 在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值 <br>" ;
$ this -> $ property_name  =  $ value ;
}
}
$ p1 = new Person();
// 直接为私有属性赋值的操作,会自动调用 __set() 方法进行赋值
$ p1 ->name= " 张三 " ;
$ p1 ->sex= " 男 " ;
$ p1 ->age= 20 ;
// 直接获取私有属性的值,会自动调用 __get() 方法,返回成员属性的值
echo  " 姓名: " . $ p1 ->name. "<br>" ;
echo  " 性别: " . $ p1 ->sex. "<br>" ;
echo  " 年龄: " . $ p1 ->age. "<br>" ;
?>

実行結果:

在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值
在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值
在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值
在直接获取私有属性值的时候,自动调用了这个 __get() 方法
姓名:张三
在直接获取私有属性值的时候,自动调用了这个 __get() 方法
性别:男
在直接获取私有属性值的时候,自动调用了这个 __get() 方法
年龄: 20

上記のコードで __get() メソッドと __set() メソッドが追加されていない場合、プログラムはエラーになります。プライベート メンバーはクラスの外部で操作することができないため、上記のコードは __get() メソッドと __set() メソッドを自動的に呼び出すことで、カプセル化されたプライベート メンバーに直接アクセスするのに役立ちます。

関連する推奨事項: php トレーニング

以上がPHPでの__getメソッドの使用法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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