Reading:オブ脳本(2)社長命令・起立!(PHP5編)
d:id:balibali:20080506:1210044632 に引き続き、オブ脳本の演習「社長命令・起立!」をPHP5でも書いてみました。
変更した点は、
- アクセス権をあちこちに追加
- staticキーワードの追加
- Shainクラスのabstract化
- __autoloadを使ってrequire_once外し
このあたりの知識がかなり曖昧だったので、マニュアル必死で読み直しました。
http://jp.php.net/manual/ja/language.oop5.php
実行結果
$ php -f Shacho.php -- Tanto 100 担当が普通に起立しました。 私の給料は100円です。 ボーナスは300円です。
$ php -f Shacho.php -- Shunin 100 主任がすばやく立ちました。 私の給料は201円です。 ボーナスは300円です。
$ php -f Shacho.php -- Bucho 100 部長がだるそうに立ちました。 私の給料は300円です。 ボーナスは300円です。
$ php -f Shacho.php -- Torishimariyaku 100 取締役がふんぞり返って立ちました。 私の給料は402円です。 ボーナスは300円です。
Shain.php
<?php abstract class Shain { private $_kihonkyu; public function setKihonkyu($kihonkyu) { $this->_kihonkyu = (int)$kihonkyu; } public function getKihonkyu() { return $this->_kihonkyu; } public function getBonus() { return $this->_kihonkyu * 3; } abstract public function standup(); abstract public function getKyuryo(); }
Tanto.php
<?php class Tanto extends Shain { public function standup() { echo '担当が普通に起立しました。' . "\n"; } public function getKyuryo() { $kihonkyu = $this->getKihonkyu(); return $kihonkyu; } }
Shunin.php
<?php class Shunin extends Shain { public function standup() { echo '主任がすばやく立ちました。' . "\n"; } public function getKyuryo() { $kihonkyu = $this->getKihonkyu(); return $kihonkyu * 2 + 1; } }
ShainFactory.php
<?php class ShainFactory { public static function factory($type) { switch ($type) { case 'Torishimariyaku': $shain = new Torishimariyaku(); break; case 'Bucho': $shain = new Bucho(); break; case 'Shunin': $shain = new Shunin(); break; case 'Tanto': default: $shain = new Tanto(); break; } return $shain; } }
Shacho.php
<?php function __autoload($className) { require $className . '.php'; } class Shacho { public function main($argv) { $shain = ShainFactory::factory($argv[1]); $kihonkyu = (int)$argv[2]; $shain->setKihonkyu($kihonkyu); $kyuryo = $shain->getKyuryo(); $shain->standUp(); echo '私の給料は' . $kyuryo . '円です。' . "\n"; echo 'ボーナスは' . $shain->getBonus() . '円です。' . "\n"; } } if ($argc !== 3) { exit('invalid arguments.' . "\n"); } $shacho = new Shacho(); $shacho->main($argv);