2011年12月19日月曜日

【php】クラスの継承メモ

phpでコード生成のプログラムを書くことがちょくちょく増えてきたので、インターフェイスとかを統一しておきたい。まずはクラスの書き方から勉強。


<?php
cmd($argc , $argv);
//コマンド
function cmd($num,$param){
if($num < 2){
echo "コマンドが入力されていません。\n";
return;
}
commandExec($param);
}

//コマンドの実行
function commandExec($arg)
{
switch($arg[1]){
case "test":
if(count($arg) < 3){ echo "引数が足りていません\n";return;}
$cmd = new TestCommand($arg[2]);
break;
default:
echo "設定されていないコマンドです。\n";
return;
}
$cmd->execute();
}

/***********************
*
* スーパークラス
*
**********************/
abstract class AbstractCommand{
protected $states;
abstract public function execute();
abstract public function toString();
}

/***********************
*
* 子クラス
*
***********************/
class TestCommand extends AbstractCommand
{
private $param;
public function TestCommand($param){
$this->param = $param;
}

public function execute(){

echo $this->param . "\n";
}

public function toString()
{
return "TestCommand";
}

}



これを実行すると。


mr-elephant:php shuzo$ php cmd.php test hoge
hoge


出力されました。上の内容でちょっとつまずいたところは、




class TestCommand extends AbstractCommand
{
private $hoge;
public function TestCommand($param){

$hoge = $param;
}

public function execute(){
echo $hoge . "\n";
}

public function toString()
{
return "TestCommand";
}

}


上のやり方だと出力されず、メンバ変数へのアクセスには必ず$this->hogeを使うとのこと。省略しちゃだめってことですね。

0 件のコメント:

コメントを投稿