Slide 1

Slide 1 text

The PHP Magic Methods Quiz PHP マジックメソッドクイズ 株式会社 ラクス 加納悠史

Slide 2

Slide 2 text

加納 悠史 PHP / 設計 / オフショア 
 @Ykanoh65
 株式会社 ラクス
 所 属
 お仕事
 その他
   Twitter
 ダイビング #PHPTechCafe 主催 
 カノウユウジ

Slide 3

Slide 3 text

3

Slide 4

Slide 4 text

4 来週火曜!! テーマ: PHPerKaigi 振り返り!

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

マジックメソッドとは? オブジェクトに対して 特定の動作が行われた時に PHPデフォルト動作を上書きして実行される 特別で 魔法のような メソッド 8

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

__construct() 動作タイミング: オブジェクトが生成された時 主な用途: オブジェクトの初期化処理 11

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

__toString() 動作タイミング: クラスが文字列に変換された時 13 class Hoge { public function __toString() { return "Text!!!"; } } $hoge = new Hoge(); echo $hoge; // 実行結果:Text!!!

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

PHP 15

Slide 16

Slide 16 text

PHP 16 マジックメソッド

Slide 17

Slide 17 text

PHP 17 マジックメソッド ズ

Slide 18

Slide 18 text

Question. 1 このメソッドの実行タイミングは??

Slide 19

Slide 19 text

Question. 1 このメソッドの実行タイミングは?? __debugInfo()

Slide 20

Slide 20 text

__debugInfo() の 実行タイミングは?? A スタックトレース 出力時 B Xdebugが ONになっている時の オブジェクト生成時 C var_dump() で 出力されるとき 20

Slide 21

Slide 21 text

A スタックトレース 出力時 B Xdebugが ONになっている時の オブジェクト生成時 C var_dump() で 出力されるとき 21 __debugInfo() の 実行タイミングは??

Slide 22

Slide 22 text

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) "教えないよ" }

Slide 23

Slide 23 text

Question. 2

Slide 24

Slide 24 text

Question. 2 このメソッドの実行タイミングについて __call()

Slide 25

Slide 25 text

__call() の実行タイミングとして 間違っているものは? 25 A 定義されていないプロパティを呼ぼうとした時 B 定義されていないメソッドを呼ぼうとした時 C privateメソッドに外部からアクセスしようとした時

Slide 26

Slide 26 text

__call() の実行タイミングとして 間違っているものは? 26 誤 A 定義されていないプロパティを呼ぼうとした時 正 B 定義されていないメソッドを呼ぼうとした時 正 C privateメソッドに外部からアクセスしようとした時

Slide 27

Slide 27 text

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(); // そんなメソッドはない 実行結果 いたしません いたしません アクセス不能メソッドに アクセスした時に起動

Slide 28

Slide 28 text

Question. 3

Slide 29

Slide 29 text

Question. 3 __set()

Slide 30

Slide 30 text

__set() 30 class hoge { public function __set(string $name, mixed $value) { echo "そんなプロパティはねえ!"; } } $hoge = new hoge(); $hoge->invalid = 1; // 実行結果:そんなプロパティはねえ!

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

33 https://www.php.net/manual/ja/language.oop5.overloading.php#object.set

Slide 34

Slide 34 text

明日から使おう マジックメソッド

Slide 35

Slide 35 text

明日から使おう マジックメソッド ?

Slide 36

Slide 36 text

乱用は勧めません ✣ フレームワークなどの内部処理用 ✣ 可読性を下げる可能性も ✣ 予想できない動きと捉えられる 36 ご利用は計画的に

Slide 37

Slide 37 text

37

Slide 38

Slide 38 text

38 要は

Slide 39

Slide 39 text

39 バランス 要は

Slide 40

Slide 40 text

40 来週火曜!! テーマ: PHPerKaigi 振り返り!