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 ...
随机推荐
- 【网络编程】Socket概念及简单聊天…
Socket(套接字) * Socket就是为网络服务提供的一种机制 * 通信的两端都是Socket * 网络通信其实就是Socket间的通信 * 数据在两个Socket间通过IO传输 我们来看看下面 ...
- 【转】超实用的JavaScript技巧及最佳实践
众所周知,JavaScript是一门非常流行的编程语言,开发者用它不仅可以开发出炫丽的Web程序,还可以用它来开发一些移动应用程序(如PhoneGap或Appcelerator),它还有一些服务端实现 ...
- 【开源项目SugarSite】ASP.NET MVC+ Layui+ SqlSugar+RestSharp项目讲解
SugarSite一个前端支持移动端的企业网站,目前只支持了简单功能,后续还会加上论坛等. 源码GIT地址: https://github.com/sunkaixuan/SugarSite 技术介绍 ...
- apache 日志轮询 linux cronolog
Linux下运行的Web服务器Apache,默认日志文件是不分割的,一个整文件既不易于管理,也不易于分析统计.安装cronolog后,可以将日志文件按时间分割,易于管理和分析. cronolog安装配 ...
- CocoaPods安装以及相关问题解决
Mac OS X上安装 Ruby环境 安装RVM $ curl -L https://get.rvm.io | bash -s stable 关闭终端,新开另外一个终端(新打开的终端会自动载入RVM环 ...
- 一个简单的Java web服务器实现
前言 一个简单的Java web服务器实现,比较简单,基于java.net.Socket和java.net.ServerSocket实现: 程序执行步骤 创建一个ServerSocket对象: 调用S ...
- nav布局 在线演示 DIVCSS5
<!doctype html> nav布局 在线演示 DIVCSS5 传统 div ul li布局导航条效果 网站首页 HTML教程 HTML入门 HTML5教程 CSS教程 CSS入门 ...
- servlet 学习(一)
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...
- 项目管理学习笔记之五.沟通协调能力II
二.沟通模型:一个双向交流的过程 沟通模型:编 码---------------->信息-----------------> 解码&歧义发送者 ...
- 挖一挖C#中那些我们不常用的东西之系列(1)——ToDictionary,ToLookup
这个系列我们看看C#中有哪些我们知道,但是又不知道怎么用,又或者懒得去了解的东西,比如这篇我们要介绍的toDictionary 和ToLookup. 从图中我们看到有四个ToXXX的方法,其中ToAr ...