オブ脳 in PHP

step1 社長命令・起立

ProEvo > PHP Evo > オブ脳 in PHP > step1 社長起立(1)


1 実行画面を決める
2. テストを書く
3. ソースを書く
4. 実行する

1 実行画面を決める

早速「社長命令・起立」を書いていきます。本の中では、Javaのコマンドラインから実行していましたが、PHPを使うのでWebページで実装します。
インターフェースは単純にコンボボックスで"担当","主任","部長"を選び、"立ちなさい"ボタンを押すと社員が立つようにします。
ソースは次のようになります.

run.php
<?php
require_once 'shachou.php';
?>
<head>
	<title>standup step1</title>
<body>

<form method="post" action="<?= $_SERVER["PHP_SELF"];?>">
	社長:
	<select name="tantou">
		<option>担当
		<option>主任
		<option>部長
	</select>
	<input type="submit" name="standup" value="立ちなさい">
</form>
<p>
<?php
$shachou = new Shachou();
echo "<PRE>\n";
echo $shachou->main();
echo "</PRE>\n";
?>
		

2. テストを書く

コマンドを実行したときのテストを書きます。PEARのPHPUnitを使いますので、ないかたはPEARコマンドでPHPUnitをインストールしてください。
テストを簡単にするため、社長が立ちなさいと命令する(standupメソッドを呼び出す)と 社員がたった動作を文字列で返すことにします。
テストのソースは次のようになります。

runtests.php
<?php
// UnitTest
require_once 'PHPUnit/GUI/HTML.php';
require_once 'Tests/shachouTest.php';

// run Test Suites
$suite = array();
array_push($suite, new PHPUnit_TestSuite("shachouTest"));

$result = new PHPUnit_GUI_HTML($suite);
$result->show();
?>
		
Tests/shachouTest.php
<?php
// $Id: 3-step1.html 1 2009-03-19 11:17:04Z atsushifx $
require_once 'PHPUnit.php';
require_once 'shachou.php';

class shachouTest extends PHPUnit_TestCase {
	var $shachou;

	function shachouTest($name)
	{
		$this->PHPUnit_TestCase($name);
	}

	function setup()
	{
		$this->shachou = new Shachou();
	}

	function testSetUp()
	{
		$this->assertEquals("shachou", get_class($this->shachou));
	}

	function testStandup()
	{
		$_POST["tantou"] = "担当";
		$ret = $this->shachou->standup();
		$this->assertEquals("担当が普通に立ちました。\n", $ret);

		$_POST["tantou"] = "主任";
		$ret = $this->shachou->standup();
		$this->assertEquals("主任がすばやく立ちました。\n", $ret);

		$_POST["tantou"] = "部長";
		$ret = $this->shachou->standup();
		$this->assertEquals("部長がだるそうに立ちました。\n", $ret);
	}
}
?>
		

上記のテストを実行すると下のような画面が表示されます。
[ユニットテスト]

3. ソースを書く

上記のテストが通るようにソースを書きます。詳しい解説は本を参照してください。
ソースは次のようになります。
shachou.php
<?php
// $Id: 3-step1.html 1 2009-03-19 11:17:04Z atsushifx $
require_once 'tantou.php';
require_once 'shunin.php';
require_once 'buchou.php';

/**
* @author Furukawa Atsushi 
*/
class Shachou {
	function main()
	{
		switch ($_POST["tantou"]) {
		case "担当":
			$shain = new Tantou();
			break;

		case "主任":
			$shain = new Shunin();
			break;

		case "部長":
			$shain = new Buchou();
			break;

		}

		return $shain->standup();
	}
}
?>
		
shain.php
<?php
// $Id: 3-step1.html 1 2009-03-19 11:17:04Z atsushifx $
/*
 * 社員用共通クラス
 */
class Shain {
	function standup()
	{
	}
}
?>
		
tantou.php
<?php
require_once 'shain.php';

/*
 * 担当
 */
class Tantou extends Shain {
	function standup()
	{
		return "担当が普通に立ちました。\n";
	}
}
?>
		
shunin.php
<?php
require_once 'shain.php';

/*
 * 主任
 */
class Shunin extends Shain {
	function standup()
	{
		return "主任がすばやく立ちました。\n";
	}
}
?>
		
buchou.php
<?php
require_once 'shain.php';

/*
 * 部長
 */
class Buchou extends Shain {
	function standup()
	{
		return "部長がだるそうに立ちました。\n";
	}
}
?>
		
以上でソースの実装は終了です。
テストを実行して下のように全部グリーンになれば終了です。
[ユニットテスト実行結果]

4. 実行する

実装が終了したので、プログラムが実行できます。
以下のリンクで動作が確認できます。
[step1 動作デモ]

$Revision: 1 $
Last update: $Date: 2009-03-19 20:17:04 +0900 (譛ィ, 19 3譛 2009) $