功能:數據庫
統計一組用戶的銀兩和金幣.ui
一.用戶接口和實現this
interface UserInterface { public function accept(Visitor $visitor); }
class User implements UserInterface { private $uid; private $silver; private $money; public function __construct($uid, $silver, $money) { $this->uid = $uid; $this->silver = $silver; $this->money = $money; } /** * @return mixed */ public function getUid() { return $this->uid; } /** * @return mixed */ public function getSilver() { return $this->silver; } /** * @return mixed */ public function getMoney() { return $this->money; } public function accept(Visitor $visitor) { $visitor->visitUser($this); } }
二.訪問者接口和實現spa
interface VisitorInterface { public function visitUser(User $user); }
class Visitor implements VisitorInterface { public $silverTotal = 0; public $moneyLevel = 0; public function visitUser(User $user) { $this->silverTotal += $user->getSilver(); $this->moneyLevel += $user->getMoney(); } public function __toString() { return "總計下屬用戶:銀兩合計:{$this->silverTotal};金幣合計:{$this->moneyLevel}"; } }
三.調用:blog
// 模擬數據庫讀取一批用戶 $user = new User(1, 10, 200); $list = []; $list[] = clone $user; $list[] = clone $user; $list[] = clone $user; $list[] = clone $user; $list[] = clone $user; $visitor = new Visitor(); foreach ($list as $user) { $user->accept($visitor); } echo $visitor;