读《深入php面向对象、模式与实践》有感(三)

php中文网
发布: 2016-07-29 09:00:26
原创
1775人浏览过

命令模式:

第一次接触到这个命令模式的时候,感觉它很像一个简化的mvc框架。从不同的路径访问,再由控制器来判断所要调用的具体php文件。

读《深入php面向对象、模式与实践》有感(三)

PHP高级程序设计 模式 框架与测试(中文高清PDF版)
PHP高级程序设计 模式 框架与测试(中文高清PDF版)

享有盛誉的PHP高级教程,Zend Framework核心开发人员力作,深入设计模式、PHP标准库和JSON 。   今天,PHP已经是无可争议的Web开发主流语言。PHP 5以后,它的面向对象特性也足以与Java和C#相抗衡。然而,讲述PHP高级特性的资料一直缺乏,大大影响了PHP语言的深入应用。   本书填补了这一空白。它专门针对有一定经验的PHP程序员,详细讲解了对他们最为重要的主题

PHP高级程序设计 模式 框架与测试(中文高清PDF版) 455
查看详情 PHP高级程序设计 模式 框架与测试(中文高清PDF版)
<span><span><?php
</span><span><em></em></span><span>class </span><span>CommandContext{   </span><span><em>//"</em></span><span><em>命令容器</em></span><span><em>"
</em></span><span><em></em></span><span>private </span><span>$params </span><span>= </span><span>array</span><span>();
</span><span>function </span><span>addParam(</span><span>$key</span><span>,</span><span>$val</span><span>){
</span><span>$this</span><span>-></span><span>params</span><span>[</span><span>$key</span><span>] = </span><span>$val</span><span>;
</span><span>    }
</span><span>function </span><span>getParam(</span><span>$key</span><span>){
</span><span>return </span><span>$this</span><span>-></span><span>params</span><span>[</span><span>$key</span><span>];
</span><span>    }
</span><span>}
</span><span>class </span><span>Controller{
</span><span>private </span><span>$cmdContext</span><span>;
</span><span>function </span><span>__construct(){
</span><span>$this</span><span>-></span><span>cmdContext </span><span>= </span><span>new </span><span>CommandContext();
</span><span>    }
</span><span><em>//
</em></span><span><em></em></span><span>function </span><span>getCmdContext(){
</span><span>return </span><span>$this</span><span>-></span><span>cmdContext</span><span>;
</span><span>    }
</span><span>function </span><span>process(){
</span><span>$action </span><span>= </span><span>$this</span><span>-></span><span>cmdContext</span><span>->getParam(</span><span>"action"</span><span>);   </span><span><em>//</em></span><span><em>通过</em></span><span><em>“</em></span><span><em>命令容器</em></span><span><em>”</em></span><span><em>获得命令
</em></span><span><em></em></span><span>$command </span><span>= CommandFactory::</span><span><em>getCommand</em></span><span>(</span><span>$action</span><span>);   </span><span><em>//</em></span><span><em>将</em></span><span><em>“</em></span><span><em>命令</em></span><span><em>”</em></span><span><em>传给</em></span><span><em>“</em></span><span><em>命令工厂</em></span><span><em>”</em></span><span><em>,得到</em></span><span><em>“</em></span><span><em>命令</em></span><span><em>”</em></span><span><em>所对应的子</em></span><span><em>command</em></span><span><em>类对象
</em></span><span><em></em></span><span>if</span><span>(</span><span>$command</span><span>->execute(</span><span>$this</span><span>-></span><span>cmdContext</span><span>)){</span><span><em>//</em></span><span><em>调用子类对象的</em></span><span><em>execute</em></span><span><em>方法并判断
</em></span><span><em></em></span><span><em>//</em></span><span><em>成功
</em></span><span><em></em></span><span><em>//</em></span><span><em>调用对应视图
</em></span><span><em></em></span><span>}</span><span>else</span><span>{
</span><span><em>//</em></span><span><em>失败
</em></span><span><em></em></span><span>}
</span><span>    }
</span><span>}
</span><span>class </span><span>CommandFactory{
</span><span>static function </span><span>getCommand(</span><span>$cmd</span><span>){
</span><span>$file </span><span>= </span><span>'commands/'</span><span>.</span><span>$cmd</span><span>.</span><span>'Command.php'</span><span>; </span><span><em>//</em></span><span><em>命令所对应的</em></span><span><em>php</em></span><span><em>文件路径
</em></span><span><em></em></span><span><em></em></span><span>if</span><span>(! </span><span><em>file_exists</em></span><span>(</span><span>$file</span><span>)){
</span><span>throw new </span><span>Exception(</span><span>"Could not find file </span><span>$file</span><span>"</span><span>);
</span><span>        }
</span><span>require_once</span><span>(</span><span>$file</span><span>);
</span><span>$class </span><span>= </span><span>$cmd</span><span>.</span><span>'Command'</span><span>;    </span><span><em>//</em></span><span><em>形成类名
</em></span><span><em></em></span><span>if</span><span>(! </span><span><em>class_exists</em></span><span>(</span><span>$class</span><span>)){
</span><span>throw new </span><span>Exception(</span><span>"Could not find class </span><span>$class</span><span>"</span><span>);
</span><span>        }
</span><span>$result </span><span>= </span><span>new </span><span>$class</span><span>();
</span><span>return </span><span>$result</span><span>;
</span><span>    }
</span><span>}
</span><span><em>//commands</em></span><span><em>文件夹内
</em></span><span>abstract class </span><span>Command{
</span><span>abstract function </span><span>execute(CommandContext </span><span>$commandContext</span><span>);
</span><span>}
</span><span>class </span><span>demoCommand </span><span>extends </span><span>Command{
</span><span>function </span><span>execute(CommandContext </span><span>$commandContext</span><span>){
</span><span>return </span><span>"ok"</span><span>;
</span><span>    }
</span><span>}
</span><span><em>//</em></span><span><em>使用代码
</em></span><span>$controller </span><span>= </span><span>new </span><span>Controller();
</span><span>$cmdContext </span><span>= </span><span>$controller</span><span>->getCmdContext();
</span><span>$cmdContext</span><span>->addParam(</span><span>"action"</span><span>,</span><span>"demo"</span><span>);
</span><span>$demo </span><span>= </span><span>$controller</span><span>->process();
</span><span>?></span></span>
登录后复制

以上就介绍了读《深入php面向对象、模式与实践》有感(三),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号