Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPマジックメソッドクイズ!/PHP Magic Method Quiz

Y-KANOH
March 25, 2023

PHPマジックメソッドクイズ!/PHP Magic Method Quiz

PHPに存在する "魔法のような" メソッド「マジックメソッド」。
普段はあまり気にしなくても、フレームワークやライブラリのコードを読むときに、見慣れないメソッドが出てきて処理を追う手が止まってしまったことはありませんか?
一つ上のPHPerになるために、これを機にマジックメソッドについての理解を深めましょう!!
本セッションではいくつかのマジックメソッドについて、クイズ形式でその効果や利用方法を説明します。

Y-KANOH

March 25, 2023
Tweet

More Decks by Y-KANOH

Other Decks in Technology

Transcript

  1. 加納 悠史 PHP / 設計 / オフショア 
 @Ykanoh65
 株式会社

    ラクス
 所 属
 お仕事
 その他
   Twitter
 ダイビング #PHPTechCafe 主催 
 カノウユウジ
  2. 3

  3. PHPのマジックメソッド 全17種 __construct() __destruct() __call() __callStatic() __get() __set() __isset() __unset()

    __sleep() __wakeup() __serialize() __unserialize() __toString() __invoke() __set_state() __clone() __debugInfo()
  4. PHPのマジックメソッド 全17種 __construct() __destruct() __call() __callStatic() __get() __set() __isset() __unset()

    __sleep() __wakeup() __serialize() __unserialize() __toString() __invoke() __set_state() __clone() __debugInfo()
  5. PHPのマジックメソッド 全17種 __construct() __destruct() __call() __callStatic() __get() __set() __isset() __unset()

    __sleep() __wakeup() __serialize() __unserialize() __toString() __invoke() __set_state() __clone() __debugInfo()
  6. __toString() 動作タイミング: クラスが文字列に変換された時 13 class Hoge { public function __toString()

    { return "Text!!!"; } } $hoge = new Hoge(); echo $hoge; // 実行結果:Text!!!
  7. PHPのマジックメソッド 全17種 __construct() __destruct() __call() __callStatic() __get() __set() __isset() __unset()

    __sleep() __wakeup() __serialize() __unserialize() __toString() __invoke() __set_state() __clone() __debugInfo()
  8. 22 __debugInfo() class User { private $name = "お名前"; private

    $mail = "[email protected]"; private $bigObj; // なんかおっきなの public function __debugInfo() { return [ "name" => $this->name, "mail" => "教えないよ", ]; } } $user = new User(); var_dump($user); 実行結果 object(User)#1 (2) { ["name"]=> string(4) "お名前" ["mail"]=> string(3) "教えないよ" }
  9. 27 __call() class Car { private int $speed; public function

    __call($name,$args) { echo "いたしません\n"; } private function speedUp() { $this->speed++; } } $car = new Car(); $car->speedUp(); // プライベート $car->jumpUp(); // そんなメソッドはない 実行結果 いたしません いたしません アクセス不能メソッドに アクセスした時に起動
  10. __set() 30 class hoge { public function __set(string $name, mixed

    $value) { echo "そんなプロパティはねえ!"; } } $hoge = new hoge(); $hoge->invalid = 1; // 実行結果:そんなプロパティはねえ!
  11. 次の実行結果は? 31 A  (なにも表示されない) B そんなプロパティはねぇ C エラーになる class hoge

    { public function __set( string $name, mixed $value ) { return "そんなプロパティはねぇ"; } } $hoge = new hoge(); $hoge->invalid = 1;
  12. 次の実行結果は? 32 A  (なにも表示されない) B そんなプロパティはねぇ C エラーになる class hoge

    { public function __set( string $name, mixed $value ) { return "そんなプロパティはねぇ"; } } $hoge = new hoge(); $hoge->invalid = 1;
  13. 37