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());
?>
PHP命令行模式的更多相关文章
- 好压(HaoZip)的命令行模式用法介绍
好压压缩软件,又叫“2345好压”,是一款国产的优秀压缩软件,目前是免费的,据官网介绍,该软件永久免费.官网地址:http://haozip.2345.com/ 本文主要对该软件的命令行模式用法进行介 ...
- WinRAR的命令行模式用法介绍
因工作中要对数据打包,顺便研究了下WinRAR的命令行模式,自己写了些例子,基本用法如下: 测试压缩文件准备:文件夹test_data,内部包含子文件夹,分别存放了一些*.log和*.txt文件. 测 ...
- 命令行模式 svn版本管理
linux 下svn 在命令行模式下的操作安装完svn服务并配置了环境变量之后,要创建一个存放工厂(项目)的仓库repositories用于版本控制(比如我的repositories的路径为 path ...
- Linux 命令行模式 你需要知道的那些事
注: 安装软件 pip install + 软件名 例如: pip install xadmin 卸载软件 pip uninstall + 软件名 例如 pip uninstall xadmin 安 ...
- 如何在命令行模式下查看Python帮助文档---dir、help、__doc__
如何在命令行模式下查看Python帮助文档---dir.help.__doc__ 1.dir函数式可以查看对象的属性,使用方法很简单,举str类型为例,在Python命令窗口输入 dir(str) 即 ...
- Linux 开机启动方式设置 inittab 详解,开机直接进入“命令行”模式
Linux下的 /etc/inittab 中的英文解释: This file describes how the INIT process should set up the system in a ...
- Ubuntu 开机进入命令行模式
1.修改配置 sudo vim /etc/default/grub 把 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 改为 GRUB_CMDL ...
- 命令行模式下 MYSQL导入导出.sql文件的方法
一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建->PATH=“:path\mysql\bin;”其中path为MYSQL的安装路径.二.简 ...
- [转载] ubuntu开机直接进入命令行模式
最近安装了ubuntu12.04来使用,每次都进入unity界面再进入命令行很不方便. 不需要界面的话,可以通过设置来开机进入命令行模式. 今天提供两中比较好的方法.经本人测试两中方法都可使用. [1 ...
- wpa_supplicant 移植及 linux 命令行模式配置无线上网
本文涉及内容为linux 命令行模式配置无线上网 及 wpa_supplicant 移植到开发板的过程,仅供参考. 1.源码下载 wpa_supplicant 源码下载地址 :http://hosta ...
随机推荐
- iOS网络监测方法
方法一(官方): Reachability ============================================================================== ...
- IOS 音效
IOS 音效 音效我们也可以成为短音频通常在程序中播放时间为1~2秒. 在应用程序中起到点缀效果,提升整体用户体验 音效文件只需要加载一次 示例代码: // // ViewController.m / ...
- 使用Android Annotations开发
使用Android Annotations框架gradle配置1.修改Module下的build.gradle apply plugin: 'com.android.application' appl ...
- [转 载] android 谷歌 新控件(约束控件 )ConstraintLayout 扁平化布局
序 在Google IO大会中不仅仅带来了Android Studio 2.2预览版,同时带给我们一个依赖约束的库. 简单来说,她是相对布局的升级版本,但是区别与相对布局更加强调约束.何为约束,即控件 ...
- android Activity生命周期(设备旋转、数据恢复等)与启动模式
1.Activity生命周期 接下来将介绍 Android Activity(四大组件之一) 的生命周期, 包含运行.暂停和停止三种状态,onCreate.onStart.onResume.o ...
- 微信网站设置右上角发送、分享的内容——.net版本
一.首先了解本文要解决的问题: 公司前一段开发了移动网站,老板喜欢通过微信看,然后把看到的东西通过右上角的按钮分享出来,但老板发现分享出来的东西,没有指定的图片,没有描述:所以我就得老老实实干活了.. ...
- 记一次ORACLE的UNDO表空间爆满分析过程
这篇文章是记录一次ORACLE数据库UNDO表空间爆满的分析过程,主要整理.梳理了同事分析的思路.具体过程如下所示: 早上收到一数据库服务器的UNDO表空间的告警邮件,最早一封是7:55发出的(监控作 ...
- HDFS 和YARN HA 简介
HDFS: 基础架构 1.NameNode(Master) 1)命名空间管理:命名空间支持对HDFS中的目录.文件和块做类似文件系统的创建.修改.删除.列表文件和目录等基本操作. 2)块存储管理. 使 ...
- SQL Server:字符串函数
以下所有例子均Studnet表为例: 1. len():计算字符串长度 len()用来计算字符串的长度,每个中文汉字或英文字母都为一个长度 select sname, len(sname) from ...
- JDK7学习笔记之基础类型
printf()的基础用法: 变量的基础用法: 字符的输出: