Reading:オブ脳本(1)社長命令・起立!(PHP4編)

3年前くらいに買ったオブ脳本を引っ張り出してきて読んでいます。

オブジェクト脳のつくり方―Java・UML・EJBをマスターするための究極の基礎講座

オブジェクト脳のつくり方―Java・UML・EJBをマスターするための究極の基礎講座

で、せっかくのプログラミング演習付きなので書籍中はJavaですがPHPで書いて公開してみようかなという試み。

演習「社長命令・起立!」をまずはPHP4で書いてみました。(PHP5でも書いてみる予定)

実行結果

$ 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
class Shain
{
    var $_kihonkyu;

    function setKihonkyu($kihonkyu) {
        $this->_kihonkyu = (int)$kihonkyu;
    }

    function getKihonkyu() {
        return $this->_kihonkyu;
    }

    function getBonus() {
        return $this->_kihonkyu * 3;
    }

    function standup() {}
    function getKyuryo() {}
}

Tanto.php

<?php
require_once './Shain.php';

class Tanto extends Shain
{
    function standup()
    {
        echo '担当が普通に起立しました。' . "\n";
    }

    function getKyuryo()
    {
        $kihonkyu = $this->getKihonkyu();
        return $kihonkyu;
    }
}

Shunin.php

<?php
require_once './Shain.php';

class Shunin extends Shain
{
    function standup()
    {
        echo '主任がすばやく立ちました。' . "\n";
    }

    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
{
    function factory($type) {
        switch ($type) {
            case 'Torishimariyaku':
                require_once './Torishimariyaku.php';
                $shain = new Torishimariyaku();
                break;
            case 'Bucho':
                require_once './Bucho.php';
                $shain = new Bucho();
                break;
            case 'Shunin':
                require_once './Shunin.php';
                $shain = new Shunin();
                break;
            case 'Tanto':
            default:
                require_once './Tanto.php';
                $shain = new Tanto();
                break;
        }
        return $shain;
    }
}

Shacho.php

<?php
require_once './ShainFactory.php';

class Shacho
{
    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はCentOS4.6で、PHPyumでパッケージインストールしたものです。

$ php -v
PHP 4.3.9 (cgi) (built: Sep 20 2007 19:31:11)
Copyright (c) 1997-2004 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies