bai_jimmy

导航

PHP命令行模式

<?php

error_reporting(E_ALL);
header('Content-Type:text/plain;charset=utf-8');

interface CommandApp {

    public function execute();
}

abstract class CommandBase implements CommandApp {

    public $resource;

    public function setRsrcParams($key, $value) {
        $this->resource[$key] = $value;
    }

    public function getRsrcParams($key) {
        return isset($this->resource[$key]) ? $this->resource[$key] : array();
    }

    public function setTplData($value) {
        $this->setRsrcParams('tplData', $value);
    }

    public function getTplData() {
        return $this->getRsrcParams('tplData');
    }

}

class Invoker {

    private $cmdlist = array();

    public function getCommandList() {
        return $this->cmdlist;
    }

    public function setCommand($cmd, $append = false) {
        $append !== true && $this->cmdlist = array();
        if (!is_object($cmd)) {
            return;
        }
        $kls = get_class($cmd);
        if (isset($this->cmdlist[$kls])) {
            unset($this->cmdlist[$kls]);
        }
        $this->cmdlist[$kls] = $cmd;
    }

    public function setCommandList($cmdlist, $append = false) {
        if ($append !== true) {
            $this->cmdlist = array();
        }
        if (is_array($cmdlist)) {
            foreach ($cmdlist as $cmd) {
                $this->setCommand($cmd, true);
            }
        }
    }

    public function clearCommandList() {
        foreach ($this->cmdlist as $kls => $cmd) {
            unset($this->cmdlist[$kls]);
        }
    }

    public function execute() {
        $res = array();
        foreach ($this->cmdlist as $kls => $cmd) {
            $cmd->execute();
        }
        return $res;
    }

}

class Cyber extends CommandBase {

    public function execute() {
        $tplData['cyber'] = '第一个命令';
        $this->setTplData($tplData);
    }

}

class Imbar extends CommandBase {

    public function execute() {
        $tplData['imbar'] = '第二个命令';
        $this->setTplData($tplData);
    }

}

class cia extends CommandBase {

    public function execute() {
        $invoker = new Invoker();
        $cmd = new Cyber();
        $commandlist[get_class($cmd)] = $cmd;
        $cmd = new Imbar();
        $commandlist[get_class($cmd)] = $cmd;
        $invoker->setCommandList($commandlist);
        $invoker->execute();
        $cia = array();
        foreach ($invoker->getCommandList() as $cmd) {
            $cia = array_merge($cia, $cmd->getTplData());
        }
        $invoker->clearCommandList();
        $tplData['cia'] = $cia;
        $this->setTplData($tplData);
    }

}

$cia = new cia();
$cia->execute();
print_r($cia->getTplData());
?>

 

posted on 2014-05-04 16:17  bai_jimmy  阅读(184)  评论(0编辑  收藏  举报