メソッドチェーンとは、メソッドをアロー演算子で複数つなぎ、複数のメソッドを一度に行うことです。
サンプルを見てみましょう。
<?php class Product { private $price = 100; public function getPrice() { return $this->price; } } class Cart { private $products = array(); public function add($product) { $this->products[] = $product; } public function get($index) { return $this->products[$index]; } } $cart = new Cart(); $product = new Product(); $cart->add($product); $prd = $cart->get(0); $price = $prd->getPrice(); $price = $cart->get(0)->getPrice(); ?>
<?php class Date { private $_timestamp; public function __construct() { $this->_timestamp = time(); } public function addDay($days) { if (true == preg_match('/^[0-9]+$/', $days)){ $str = sprintf('+%s day', $days); $this->_timstamp = strtotime($str, $this->_timestamp); } } public function format($format) { return date($format, $this->_timestamp); } } $date = new Date(); $date->addDay(3); $fmt = $date->format('Y/m/d H:i'); var_dump($fmt); ?>
<?php class Chain { protected $price; protected $quantity; protected $option; public function setPrice($price){ $this->price = $price; return $this; } public function setQuantity($quantity){ $this->quantity = $quantity; return $this; } public function setOption($option){ $this->optioin = $option; return $this; } public function get(){ $amount = $this->price * $this->quantity; foreach ($this->option as $key => $val){ if ($key == 'tax') $amount -= ceil($amount * $val); elseif($key == 'discount') $amount -= $val; } return $amount; } } $chain = new Chain(); $chain ->setPrice(100) ->setQuantity(5) ->setOption(array( 'tax' => '0.05', 'discount' => '150' )); $total_amount = $chain->get(); echo $total_amount; ?>