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;
    }
}

Bucho.php

Tanto.php, Shunin.php とほぼ同じなので省略。

Torishimariyaku.php

Tanto.php, Shunin.php とほぼ同じなので省略。

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);

実行環境(補足)

OSはDebian(sid)で、PHPはaptでパッケージインストールしたものです。

$ php -v
PHP 5.2.5-3 with Suhosin-Patch 0.9.6.2 (cli) (built: Feb 21 2008 02:03:40)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies