1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
<?php $猫1 = 猫ビルダー::builder() ->年齢(7) ->名前('クロちゃん') ->毛の色('黒') ->build(); $猫2 = 猫ビルダー::builder() ->名前('シロ子') ->毛の色('白') ->年齢(8) ->build(); echo $猫1, $猫2; class 猫 { protected $毛の色; protected $年齢; protected $名前; public function __construct($毛の色, $年齢, $名前) { $コンストラクタを呼び出したクラス = debug_backtrace()[1]['class']; if (false === strpos($コンストラクタを呼び出したクラス, '猫ビルダー')) { throw new Exception('猫は猫ビルダーからしか生まれないニャ'); } $this->毛の色 = $毛の色; $this->年齢 = $年齢; $this->名前 = $名前; } public function __toString() { return "{$this->名前}({$this->年齢}/{$this->毛の色})"; } } class 猫ビルダー { protected $毛の色; protected $年齢; protected $名前; public static function builder() { return new 猫ビルダー; } public function build() { if (!$this->毛の色 || !$this->年齢 || !$this->名前) { throw new Exception('何らかのパラメタが足りないニャー'); } return new 猫($this->毛の色, $this->年齢, $this->名前); } public function 毛の色($a) { $this->毛の色 = $a; return $this; } public function 年齢($a) { $this->年齢 = $a; return $this; } public function 名前($a) { $this->名前 = $a; return $this; } } |
1 |
クロちゃん(7/黒)シロ子(8/白) |