__set()および__get()
単一のクラスは、プロパティは、外部からアクセスすることはできません私有財産に設定されている場合。外にそれを行う方法を、私たちが達成するためにメソッドを使用することができたときに我々がアクセスしたいときに。たとえば、次のように:
1 クラス試験 2 { 3 プライベート $のABC 。 4 5 パブリック 関数 setAbc($ヴァル) 6 { 7 $この - > ABC = $ヴァル。 8 } 9 10 パブリック 関数getAbc() 11 { 12 リターンは、 これを$ - > ABC 。 13 } 14 } 15 16 $テスト = 新しいテスト(); 17 $テストは - > setAbc( "これはABCです!" ); 18 のvar_dump($テスト - > getAbc());
このコードは、外部の私有財産へのより多くのアクセスを実現することができますが、私たちの私有財産が複数ある場合ABDがある場合、我々は外部からアクセスしたい場合は、それは非常にあるので、そう、あなたはまた、ABDのための特別なメソッドを記述する必要がありますトラブル。どのように私有財産の複数のアクセスを実現するために、それを行うための一つの方法を記述する必要はありませんか?__getとこの時間__setに便利です。次のようにコードを上記の例では、書くことができます。
1 クラス試験 2 { 3 プライベート $のABC 。 4 プライベート $アブド。 5 6 パブリック 関数 __set($ VAR、$ヴァル) 7 { 8 $この - > $ VAR = $ヴァル。 9 } 10 11 パブリック 関数 __get($ VAR ) 12 { 13 リターンは これを$ - > $ VAR 。 14 } 15 } 16 17 $テスト = 新しいテスト(); 18 $テスト - > ABC = "これはプライベートABCです" 。 19は エコー $テストを - > ABC ;
__set($ VAR、$ val)で2つのパラメータがありますが、最初のものは、第二の属性値である、属性名です。
__get($ VAR):唯一の引数、プロパティ名。
このコードは、我々がプライベートプロパティに割り当てると、それは自動的に__setを実行するために行くだろう()このメソッドは、(我々は、プロパティ値を取得したいとき、それは自動的に__getを実行するために行くだろう、と同じである)。この方法上記。同じ属性の構文にアクセスするためのアクセス権を持つ構文公共。
__isset()
__isset($ VAR):私有財産の有無を検出するために使用されます。一つのパラメータのみ、属性名。私たちは次のように、コードを説明するために使用しました:
1 クラス試験 2 { 3 プライベート $ ABC = 'ABC' 。 4 } 5 $テスト = 新しいテスト(); 6 のvar_dump(ISSET($テスト - > ABC));
そうブールFALSEを返し、クラスABC、このプロパティがありますが、上記に代わって、この結果の実装は、リターンブールFALSEであるが、それは外にアクセスすることはできません、私有財産です。テストするために、我々は以下のものを含むクラスの__isset()メソッドを追加することができます。
1 クラス試験 2 { 3 プライベート $ ABC = 'ABC' 。 4 5 パブリック 関数 __isset($ VAR ) 6 { 7 戻り ISSET($この - > $のVAR)?真:偽; 8 } 9 } 10 $テスト = 新しいテスト(); 11 のvar_dump(ISSET($テスト - > ABC));
上記のコードの結果がブール値TRUEを返すように実行され、ABCが検出されない外部ISSET($テスト - > ABC)場合、それは自動的にこのメソッドが結果を返す)(実行クラスの内部に__issetを移動します。
__unset()
__unset($ VAR):私有財産、唯一つのパラメータ、属性名を削除するために使用。たとえば、次のように:
1 クラス試験 2 { 3 プライベート $ ABC = 'ABC' 。 4 5 パブリック 関数 __unset($ VAR ) 6 { 7 エコー "__unset:"。$ VAR ; 8 設定を解除($この - > $のVAR )。 9 } 10 } 11 $テスト = 新しいテスト(); 12 設定を解除($テスト - > ABC);
上記のコード、ABCが検出されない場合($テスト - > ABC)外部設定を解除、実行クラスが)(__unsetの内側に、このメソッドは、delete属性を移動します。