投稿

ラベル(マジックメソッド)が付いた投稿を表示しています

[PHP] マジックメソッド - クラスオブジェクトについての処理

クラスのオブジェクトに関するマジックメソッドについて3つほどまとめます。 __toStringメソッド __toStringメソッドは、クラスのオブジェクトを文字列として出力しようとした際に呼び出されるマジックメソッドです。 通常クラスのオブジェクトは、文字列として出力しようとしてもconvertエラーとなってしまい出力できません。 class Test { private string $name; public function __construct(string $name) { $this->name = $name; } } $test = new Test("Hoge"); echo "name=", $test, "\n"; $ php test_magic-method.php name= Fatal error: Uncaught Error: Object of class Test could not be converted to string in .¥test_magic-method.php:101 Stack trace: #0 {main} thrown in .\test_magic-method.php on line 101 これを解決するのが__toStringメソッドです。 マジックメソッドのシグネチャ 1. __toStringメソッドのシグネチャ アクセス修飾子 public メソッド名 __toString 戻り値 string [実装例]クラスオブジェクトの文字列変換 冒頭のコードに__toStringメソッドを実装して、文字列に変換した場合の出力を指定します。 コード class Test { private string $name; public function __construct(string $name) { $this->name = $name; } public functi

[PHP] マジックメソッド - 未定義属性の処理

マジックメソッドとは、クラスに定義されるメソッドで、あらかじめ役割が決められたいくつかのメソッドのことを言います。 以下の記事で取り上げたコンストラクタとデストラクタについても、マジックメソッドの一種です。 https://www.s-watanabe.work/2022/12/php_11.html ここでは、未定義の属性への操作しようとしたときに呼び出されるメソッドについてまとめていきます。 __setメソッドと__getメソッド PHPは基本的に未定義の属性へのアクセスが可能になっています。例えば以下のコードはエラーにならずに実行可能です。 class Test { } $test = new Test(); $test->name = 'Hoge'; echo "name=", $test->name, "\n\n"; var_dump($test); 実行結果は以下のようになります。 $ php test_magic-method.php name=Hoge object(Test)#1 (1) { ["name"]=> string(4) "Hoge" } この属性をセットする時の処理を制御するのが __setメソッド、属性を取得する処理を制御するのが __getメソッドです。 マジックメソッドのシグネチャ __setメソッド 1. __setメソッドのシグネチャ アクセス修飾子 public or なし メソッド名 __set 第一引数 string (属性名) 第二引数 mixed (値) 戻り値 void __getメソッド 2. __getメソッドのシグネチャ アクセス修飾子 public or なし メソッド名 __get 第一引数 string (属性名) 戻り値 mix