<?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());
?>

PHP命令行模式的更多相关文章

  1. 好压(HaoZip)的命令行模式用法介绍

    好压压缩软件,又叫“2345好压”,是一款国产的优秀压缩软件,目前是免费的,据官网介绍,该软件永久免费.官网地址:http://haozip.2345.com/ 本文主要对该软件的命令行模式用法进行介 ...

  2. WinRAR的命令行模式用法介绍

    因工作中要对数据打包,顺便研究了下WinRAR的命令行模式,自己写了些例子,基本用法如下: 测试压缩文件准备:文件夹test_data,内部包含子文件夹,分别存放了一些*.log和*.txt文件. 测 ...

  3. 命令行模式 svn版本管理

    linux 下svn 在命令行模式下的操作安装完svn服务并配置了环境变量之后,要创建一个存放工厂(项目)的仓库repositories用于版本控制(比如我的repositories的路径为 path ...

  4. Linux 命令行模式 你需要知道的那些事

    注: 安装软件 pip install + 软件名  例如: pip install xadmin 卸载软件 pip uninstall + 软件名 例如 pip uninstall xadmin 安 ...

  5. 如何在命令行模式下查看Python帮助文档---dir、help、__doc__

    如何在命令行模式下查看Python帮助文档---dir.help.__doc__ 1.dir函数式可以查看对象的属性,使用方法很简单,举str类型为例,在Python命令窗口输入 dir(str) 即 ...

  6. Linux 开机启动方式设置 inittab 详解,开机直接进入“命令行”模式

    Linux下的 /etc/inittab 中的英文解释: This file describes how the INIT process should set up  the system in a ...

  7. Ubuntu 开机进入命令行模式

    1.修改配置 sudo vim /etc/default/grub 把 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 改为 GRUB_CMDL ...

  8. 命令行模式下 MYSQL导入导出.sql文件的方法

    一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建->PATH=“:path\mysql\bin;”其中path为MYSQL的安装路径.二.简 ...

  9. [转载] ubuntu开机直接进入命令行模式

    最近安装了ubuntu12.04来使用,每次都进入unity界面再进入命令行很不方便. 不需要界面的话,可以通过设置来开机进入命令行模式. 今天提供两中比较好的方法.经本人测试两中方法都可使用. [1 ...

  10. wpa_supplicant 移植及 linux 命令行模式配置无线上网

    本文涉及内容为linux 命令行模式配置无线上网 及 wpa_supplicant 移植到开发板的过程,仅供参考. 1.源码下载 wpa_supplicant 源码下载地址 :http://hosta ...

随机推荐

  1. 你真的了解UIButton、UILabel 吗?

    一:首先查看一下关于UIButton的定义 @class UIImage, UIFont, UIColor, UIImageView, UILabel; //设置UIButton的样式 typedef ...

  2. [读书笔记] CSS权威指南2: 结构和层叠

    层叠样式表中最基本的一个方面可能就是层叠——冲突的声明要通过这个层叠过程排序,并由此确定最终的文档表示.这个过程的核心是选择器及其相关声明的特殊性,以及继承机制. 特殊性 对于每个规则,用户代理会计算 ...

  3. IOS开发之小实例--创建一个简单的用于视频录制和回放的应用程序

    前言:还是看了一下国外的入门IOS文章:<Create a Simple App for Video Recording and Playback>,主要涉及视频录制和回放的功能的基本实现 ...

  4. 学习 HTML5-页面结构(1)

    缘起 2014年10月29日,万维网联盟宣布,经过几乎8年的艰辛努力,HTML5标准规范终于最终制定完成了,并已公开发布. 而HTML5的草稿版本在13年就已经放出.作为一个有追求的程序猿这次想赶一次 ...

  5. JS中的事件

    事件中的几种实现方式 Dom0时代 1.直接在html的属性中写JS代码 <div onclick="alert(4);">Div1 Element</div&g ...

  6. MySql 中 case when then else end 的用法

    解释: SELECT                case                   -------------如果    when sex='1' then '男' ---------- ...

  7. 项目管理学习笔记之五.沟通协调能力II

    二.沟通模型:一个双向交流的过程 沟通模型:编     码---------------->信息-----------------> 解码&歧义发送者               ...

  8. CDC 2013 北京站手记

    受搜狐畅游的邀请,这次能够有机会参与2013中国开发者大会北京站的活动. 本次大会的主题是“游戏”和“移动”,因此上午的峰会安排了5个主讲,分别就搜索.云存储服务器.游戏媒体.移动应用和游戏渠道等多方 ...

  9. Maven 打包涉及证书文件问题

    当使用maven-assembly-plugin或者maven-shade-plugin打包时,如果涉及到证书文件,一定设置过滤,否则证书文件会被做修改.报异常: java.io.IOExceptio ...

  10. Java设计模式学习笔记(观察者模式)

    观察者模式说起来很简单,就是一个订报纸的模式.但是实际上这部分我觉得还是很有意思的,<Head First设计模式>里还有一些还没看完,也是因为理解的不够深吧. 观察者模式会包含两个组件: ...