テンプレートパターンの説明用のプログラム。「社長命令・起立」の氏名・基本給設定つきの例
本の中の仕様に従い社員クラスを作成します。
TDDに従いテストケースから作ります。
テストのソースは次のようになります。
<?php
// UnitTest
require_once 'PHPUnit/GUI/HTML.php';
require_once 'Tests/TantouTest.php';
require_once 'Tests/ShuninTest.php';
require_once 'Tests/BuchouTest.php';
// run Test Suites
$suite = array();
array_push($suite, new PHPUnit_TestSuite("TantouTest"));
array_push($suite, new PHPUnit_TestSuite("ShuninTest"));
array_push($suite, new PHPUnit_TestSuite("BuchouTest"));
$result = new PHPUnit_GUI_HTML($suite);
$result->show();
?>
<?php
require_once 'PHPUnit.php';
require_once 'Tantou.php';
class TantouTest extends PHPUnit_TestCase {
var $shain;
function TantouTest($name)
{
$this->PHPUnit_TestCase($name);
}
function setup()
{
$this->shain = new Tantou("牛尾", 100);
}
function testStandup()
{
$out = $this->shain->standup();
$this->assertEquals("担当牛尾起立しました。給料は100円です。\n", $out);
}
}
?>
<?php
require_once 'PHPUnit.php';
require_once 'Shunin.php';
class ShuninTest extends PHPUnit_TestCase {
var $shain;
function ShuninTest($name)
{
$this->PHPUnit_TestCase($name);
}
function setup()
{
$this->shain = new Shunin("菅原", 100);
}
function testStandup()
{
$out = $this->shain->standup();
$this->assertEquals("主任菅原起立しました。給料は201円です。\n", $out);
}
}
?>
<?php
require_once 'PHPUnit.php';
require_once 'Buchou.php';
class BuchouTest extends PHPUnit_TestCase {
var $shain;
function BuchouTest($name)
{
$this->PHPUnit_TestCase($name);
}
function setup()
{
$this->shain = new Buchou("Jackson", 100);
}
function testStandup()
{
$out = $this->shain->standup();
$this->assertEquals("部長Jackson起立しました。給料は300円です。\n", $out);
}
}
?>
<?php
class Shain {
var $name; // 社員氏名
var $kihonkyu; // 基本給
function standup()
{
}
}
?>
<?php
require_once 'Shain.php';
class Tantou extends Shain {
function Tantou($name, $kihonkyu)
{
$this->name = $name;
$this->kihonkyu = $kihonkyu;
}
function standup()
{
$out = "担当" . $this->name . "起立しました。";
$out .= "給料は" . $this->kihonkyu . "円です。\n";
return $out;
}
}
?>
<?php
require_once 'Shain.php';
class Shunin extends Shain {
function Shunin($name, $kihonkyu)
{
$this->name = $name;
$this->kihonkyu = $kihonkyu;
}
function standup()
{
$kyuryou = $this->kihonkyu * 2 + 1;
$out = "主任" . $this->name . "起立しました。";
$out .= "給料は" . $kyuryou . "円です。\n";
return $out;
}
}
?>
<?php
require_once 'Shain.php';
class Buchou extends Shain {
function Buchou($name, $kihonkyu)
{
$this->name = $name;
$this->kihonkyu = $kihonkyu;
}
function standup()
{
$kyuryou = $this->kihonkyu * 3;
$out = "部長" . $this->name . "起立しました。";
$out .= "給料は" . $kyuryou . "円です。\n";
return $out;
}
}
?>
<?php
require_once 'Tantou.php';
require_once 'Shunin.php';
require_once 'Buchou.php';
class Shachou {
function main()
{
$name = $_POST["name"];
$kihonkyu = intval($_POST["kihonkyu"]);
switch ($_POST["tantou"]) {
case "担当":
$shain = new Tantou($name, $kihonkyu);
break;
case "主任":
$shain = new Shunin($name, $kihonkyu);
break;
case "部長":
$shain = new Buchou($name, $kihonkyu);
break;
}
return $shain->standup();
}
}
?>
<?php require_once 'Shachou.php'; ?> <head> <title>temolate step1</title> <body> <form method="post" action="<?= $_SERVER["PHP_SELF"];?%gt;"> 社長: <select name="tantou"> <option>担当 <option>主任 <option>部長 </select> 氏名 = <input type="text" name="name" size="20"> 基本給= <input type="text" name="kihonkyu" size="5"> <input type="submit" name="standup" value="立ちなさい"> </form> <p> <?php $shachou = new Shachou(); echo "<PRE>\n"; echo $shachou->main(); echo "</PRE>\n"; ?>
[デモ]
Copyright © 1997-2003 by A.G.Labo
$Revision: 1 $