⊗ppOpMgSP 91 of 107 menu

PHPにおけるOOPにおけるマジックを使用したプロパティの書き込み

マジックメソッド __set は、 存在しないまたは非公開のプロパティの値を 変更しようとしたときに呼び出されます。 パラメータとして、プロパティ名と 代入しようとしている値を受け取ります。

実用的な例を見てみましょう。 以下のような Test クラスがあるとします:

<?php class Test { private $prop1; private $prop2; } ?>

このクラスにマジックメソッド __set を作成し、関数 var_dump を使ってアクセスされた プロパティ名と設定しようとしている値を 表示するようにしましょう:

<?php class Test { private $prop1; private $prop2; public function __set($property, $value) { var_dump($property . ' ' .$value); } } ?>

クラスの動作を確認してみましょう:

<?php $test = new Test; $test->prop = 'value'; // __setメソッドのvar_dumpが'prop value'を出力します ?>

次に、変数 $property に格納されている 名前のプロパティに値を設定するようにしましょう:

<?php class Test { private $prop1; private $prop2; public function __set($property, $value) { $this->$property = $value; // 値を設定します } } ?>

これで、クラスの外部からプライベートプロパティに 書き込めるようになります:

<?php $test = new Test; $test->prop1 = 1; // 1を書き込みます $test->prop2 = 2; // 2を書き込みます ?>

書き込みはできますが、そこに何か書き込まれたかどうかは、 プロパティがプライベートなので確認できません。

これらのプロパティのためのゲッターメソッドを作るか、 単にマジックメソッド __get を利用できます。 後者の方法を使ってみましょう:

<?php class Test { private $prop1; private $prop2; public function __set($property, $value) { $this->$property = $value; } // プロパティのマジックゲッター: public function __get($property) { return $this->$property; } } ?>

これでクラスの動作を確認できるようになりました。 確認してみましょう:

<?php $test = new Test; $test->prop1 = 1; // 1を書き込みます $test->prop2 = 2; // 2を書き込みます echo $test->prop1; // 1を出力します echo $test->prop2; // 2を出力します ?>

もちろん実際には、誰にでもプライベートプロパティへの 書き込みを許可すべきではありません。 そうしないと、これらのプライベートプロパティの意義が 失われてしまうからです(パブリックにしてしまえば済む話です)。

したがって、このメソッドは本当に必要な場合にのみ 使用すべきです。 次のレッスンでは、上手な活用例もさらに見ていきます。

日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否