Reading:オブ脳本(7)Template Methodパターン(PHP5編)
オブ脳本、超手抜きパターン取得法の章に戻って、Template Methodパタンの例をPHP5で書いてみました。
実行結果
$ php -f Shacho.php -- Tanto 小川 100 担当小川起立します。給料は100円です。 $ php -f Shacho.php -- Shunin 中川 100 主任中川起立します。給料は201円です。
Shain.php
<?php abstract class Shain { private $_name; private $_kihonkyu; public function __construct($name, $kihonkyu) { $this->_name = $name; $this->_kihonkyu = $kihonkyu; } public final function standup() { echo $this->_getYakushoku() . $this->_name . '起立します。' . '給料は' . $this->_getKyuryo() . '円です。' . "\n"; } protected function _getKihonkyu() { return $this->_kihonkyu; } abstract protected function _getKyuryo(); abstract protected function _getYakushoku(); }
Tanto.php
<?php class Tanto extends Shain { protected function _getKyuryo() { return $this->_getKihonkyu(); } protected function _getYakushoku() { return '担当'; } }
Shunin.php
<?php class Shunin extends Shain { protected function _getKyuryo() { return $this->_getKihonkyu() * 2 + 1; } protected function _getYakushoku() { return '主任'; } }
Shacho.php
<?php function __autoload($className) { require $className . '.php'; } class Shacho { public function main($argv) { $shain = null; switch ($argv[1]) { case 'Tanto': case 'Shunin': $className = $argv[1]; $shain = new $className($argv[2], (int)$argv[3]); break; default: exit('undefined class name.' . "\n"); } $shain->standup(); } } if ($argc !== 4) { exit('invalid arguments.' . "\n"); } $shacho = new Shacho(); $shacho->main($argv);