zend历程 之 多模块控制器
控制器就是保存在 controller 文件夹下的文件,并且这些文件都是继承了 Zend_Controller_Action 的类,对了,这就是ZF中的控制器了( [点击图片可在新窗口打开] 不能理解,呵呵)如:文件/controller/fooController.php
<?php
class FooController extends Zend_Controller_Action
{
var $views;
var $data;
public function init()
{
//拿回注册过的对象
$this->views = Zend_Registry::get(''views'');
}
public function testAction()
{
echo "hello world!";
}
}
那么现在访问 http://localhost/foo/test 就会显示 hello world 。ZF将url中的 foo 解释为控制器名,也就是我们这个 fooController.php 文件了,将url中的test解释为控制器中的方法,也就是我们写的 public function testAction() 函数了,(嗯,这个不难!)
接下来就是这篇文章的重点了:
因为,从上面可以知道,这样做的结果是所有的控制器文件都在同一个文件夹下(controller ),少还可以,多了就有点乱了,而且,有时要分不同的模块,我们并不想所有的都放在一起,这就要分模块(也就是放在不同的文件夹下了)。
zend framework 手册上有说到:(如下)
// Set the default controller directory:
$front->setControllerDirectory(''../application/controllers'');
// Set several module directories at once:
$front->setControllerDirectory(array(
''default'' => ''../application/controllers'',
''blog'' => ''../modules/blog/controllers'',
''news'' => ''../modules/news/controllers'',
));
// Add a ''foo'' module directory:
$front->addControllerDirectory(''../modules/foo/controllers'', ''foo'');
说明一下,也就是我们在 index.php 中,设定前端路由器的工作目录的那一段代码
从中可以看,可以建立不同的文件夹,如 /modules/blog/controllers 将其定义为
模块 blog ,以 blog 为模块命名
我试了下,在 /modules/blog/controllers 中创建文件blogdomController.php
内容如下:
<?php
class BlogdomController extends Zend_Controller_Action
{
public function indexAction()
{
echo ''blogDom'';
从入门PHP的第二个星期,就开是接触Zend framework了,可是,后来就放了。当时没有做下笔记,接着就什么都忘了,回悔啊,现在重新学过吧!
今天要看的是控制器,这玩意太大,我也只是看看皮毛,由浅入深吧!
下面是一个简单的控制器:
class helloController extends Zend_Controller_Action
{
function indexAction()
{
echo "hi, this is my helloworld";
}
function testAction()
{
$var1 = $this->_getParam("var");
echo "hello".$book_id;
}
function __call($action,$args){
$this->_redirect(''/hello'');
}
}
运行结果是这样的:
http://localhost/hello/test/var/world 会显示 hellowrold
http://localhost/hello/netaction 时,会显示 hi, this is my helloworld
其实我想说明的也就上面分色的两点:
红:在Zend中,我有接收参数,不管是 post 还是 get 的,只要用 如:
$this->_getParam("var");
的形式即可,
final protected function _getParam($paramName, $default = null) 是控制器的私有方法,它还要可是带第二个参数,作为默认值,当没有得到你想要的参数时,返回这个默认值。
蓝:这个函数的目的为是,当访问的方法不存在时,自己转到一个地址(这里就是:http://localhost/hello 了)
前言
面向对象博大精深,对于从未接触过得的人,会觉得一头雾水。
学习的资料很多,但大多比较抽象,所以我用经典的游戏-星际争霸来讨论PHP面向对象。
现在假设我们来用PHP开发星际争霸,从而接触PHP面向对象。
注意,为了便于学习,除了特殊说明,否则各部分代码之间没有关联。而且同一件事情往往用的是不同的代码。
另外我也不去考证各个兵种的属性数字,仅仅用来说明。
一、类和对象
如果玩家制造了一个机枪兵,那么我们怎么表示他呢,因为每个机枪兵有几个基本的数据要记录:剩余的血,杀敌数量,攻击力等等。
我们可以用一个数组来记录一个机枪兵剩余的血和杀敌数量,因为这对于每个机枪兵是独立的。
但攻击力比较麻烦,因为经过升级,攻击力会增加,这就必须要找出所有表示机枪兵的数组,然后进行修改,非常麻烦。
从这里我们可以看出一件事情,首先每个机枪兵有独立的数据需要记录和修改,比如剩余的血。同时他们有相同的数据需要共用,比如攻击力。
这时候面向对象就能帮上我们的忙了。
1.1、类的定义
我们先来处理一部分问题,也就是每个机枪兵独有的数据。
class marine
{
public $blood = 50; //剩余的血
public $kills = 0; //杀敌数量
//这个函数(通常叫做方法)表示攻击敌人时候的运行代码
function attack($enemy)
{
//攻击敌人的代码
}
}
这叫做类,我们建立了一个表示所有机枪兵的类marine,这里面保留了需要每个兵独有的数据,比如上面代码里的剩余的血。
1.2、对象的创建和使用
接下来我们来使用对象,也就是每个机枪兵:
$m1 = new marine();
通过new后面加一个类的名字和括号,我们新建了一个机枪兵$m1,$m1被叫做类marine的对象,我们可以把它想象成一个特殊变量,只不过里面保存了多个数据。
如果需要使用或者操作某个机枪兵的血(对象的属性),只要用$m1->blood来表示就可以了:
echo $m1->blood;//输出机枪兵$m1剩余的血
我们再建立一个机枪兵
$m2 = new marine();
如果此时$m1被敌人攻击过了,还剩下10个血。而$m2没受过攻击:
echo $m1->blood;//结果是10
echo $m2->blood;//结果是50
使用对象可以很简单的保存每个机枪兵的血,不会互相影响。
如果机枪兵$m1攻击敌人的时候,可以这样使用对象的方法:
$m1->attack($z1);//假设攻击的是某个小狗的对象$z1
不同的类内可以用同名的函数,比如小狗的类Zergling里面也可以有一个函数attack
要注意的是,从PHP5开始,无论在哪里改变一个对象的属性,都能改变它。比如上面一个小狗对象被作为参数传入机枪兵的attack函数,执行函数之后这个小狗对象的血减少了,这和一般的函数不同。但这是很直观的,如果一个小狗被攻击了,它的血就应该减少。
二、构造函数和析构函数
每次我们新建一个机枪兵的时候,总人口应该加1,如果一个机枪兵被杀,人口应该减少1。
可以通过构造函数和析构函数来自动处理:
适用于 php-5.2 的 php.ini 中文版
;;;;;;;;;;;;;;
;; 简介 ;;
;;;;;;;;;;;;;;
; 本文并非是对英文版 php.ini 的简单翻译,而是参考了众多资料以后,结合自己的理解,增加了许多内容,
; 包括在原有 php.ini 基础上增加了一些实用模块的配置说明,同时对文件内容的安排进行了调整。
; 由于作者不喜欢 no-free 的玩意儿,所以删除了除 MySQL 和 PostgreSQL 以外的其他数据库模块配置选项。
;;;;;;;;;;;;;;;;;
;; 关于php.ini ;;
;;;;;;;;;;;;;;;;;
; 这个文件必须命名为''php.ini''并放置在httpd.conf中的PHPIniDir指令指定的目录中。
; 最新版本的php.ini可以在下面两个位置查看:
; [url]http://cvs.php.net/viewvc.cgi/php-src/php.ini-recommended?view=co[/url]
; [url]http://cvs.php.net/viewvc.cgi/php-src/php.ini-dist?view=co[/url]
;;;;;;;;;;;;
;; 语法 ;;
;;;;;;;;;;;;
; 该文件的语法非常简单。空白字符和以分号开始的行被简单地忽略。
; 章节标题(例如: [php])也被简单地忽略,即使将来它们可能有某种意义。
;
; 设置指令的格式如下:
; directive = value
; 指令名(directive)是大小写敏感的!所以"foo=bar"不同于"FOO=bar"。
; 值(value)可以是:
; 1. 用引号界定的字符串(如:"foo")
; 2. 一个数字(整数或浮点数,如:0, 1, 34, -1, 33.55)
; 3. 一个PHP常量(如:E_ALL, M_PI)
; 4. 一个INI常量(On, Off, none)
; 5. 一个表达式(如:E_ALL & ~E_NOTICE)
;
; INI文件中的表达式仅使用:位运算符、逻辑非、圆括号:
; | 位或
; & 位与
; ~ 位非
; ! 逻辑非
;
; 布尔标志用 On 表示打开,用 Off 表示关闭。
;
; 一个空字符串可以用在等号后不写任何东西表示,或者用 none 关键字:
; foo = ; 将foo设为空字符串
; foo = none ; 将foo设为空字符串
; foo = "none" ; 将foo设为字符串''none''
;
; 如果你在指令值中使用动态扩展(PHP扩展或Zend扩展)中的常量,
; 那么你只能在加载这些动态扩展的指令行之后使用这些常量。
;;;;;;;;;;;;;;;;;;
;; httpd.conf ;;
;;;;;;;;;;;;;;;;;;
; 还可以在httpd.conf中覆盖php.ini的值,以进行更灵活的配置:
; php_value name value ;设置非bool型的指令,将value设为none则清除先前的设定
; php_flag name on|off ;仅用于设置bool型的指令
;
; PHP常量(如E_ALL)仅能在php.ini中使用,在httpd.conf中必须使用相应的掩码值。
; 带"SYS"标志的指令只能在httpd.conf中的全局配置部分使用,
; 带"ini"标志的指令不能在httpd.conf中使用,它们仅能用于php.ini中。
;==========================================================================================
;;=====================================配置指令详解========================================
;==========================================================================================
/*
======================================================================
lastRSS 0.9.1
Simple yet powerfull PHP class to parse RSS files.
by Vojtech Semecky, webmaster @ webdot . cz
Latest version, features, manual and examples:
http://lastrss.webdot.cz/
----------------------------------------------------------------------
LICENSE
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License (GPL)
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
To read the license please visit http://www.gnu.org/copyleft/gpl.html
======================================================================
*/
/**
* lastRSS
* Simple yet powerfull PHP class to parse RSS files.
*/
class lastRSS {
// -------------------------------------------------------------------
// Public properties
// -------------------------------------------------------------------
var $default_cp = ''UTF-8'';
var $CDATA = ''nochange'';
var $cp = '''';
var $items_limit = 0;
var $stripHTML = False;
var $date_format = '''';
// -------------------------------------------------------------------
// Private variables
// -------------------------------------------------------------------
var $channeltags = array (''title'', ''link'', ''descrīption'', ''language'', ''copyright'', ''managingEditor'', ''webMaster'
相关文章
- 这篇文章主要介绍了Python运行提示缺少模块问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-10
- 这两天在用Perl编写一些监控脚本,其实写代码也是一件挺有意思的事情,就是挺废时间的。而且,由于语法不太熟,基本想到一个东西都要先Google一下看怎么实现。...2020-06-29
- 这篇文章主要介绍了Python PyPDF2模块安装使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-04-22
- 这是一款简单的ASP.NETC#注册登录模块制作思路,非常简单实用,虽然没怎么考虑登陆的安全性,但作为C#的朋友学习交流使用。...2020-06-25
- 这篇文章主要介绍了python speech模块的使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-09
- 这篇文章主要介绍了Node.js API详解之 console模块用法,总结分析了Node.js API中console模块基本函数、使用方法与操作注意事项,需要的朋友可以参考下...2020-05-12
- 这篇文章主要介绍了Python xmltodict模块安装及代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-05
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
这篇文章主要介绍了Zend Framework动作助手(Zend_Controller_Action_Helper)用法,详细分析了动作助手Zend_Controller_Action_Helper功能,定义,使用方法与相关实现代码,需要的朋友可以参考下...2016-03-10Zend Framework动作助手Redirector用法实例详解
这篇文章主要介绍了Zend Framework动作助手Redirector用法,结合实例形式详细分析了转向器Redirector的功能,使用方法与相关注意事项,需要的朋友可以参考下...2016-03-10- 这篇文章主要介绍了Lua中的模块(module)和包(package)详解,本文讲解了require函数、写一个模块、package.loaded、module函数等内容,需要的朋友可以参考下...2020-06-30
IIS下Zend 出现 Unable to view file mapping 问题的解决方法汇总
这篇文章主要介绍了IIS下Zend 出现 Unable to view file mapping 问题的解决方法汇总,需要的朋友可以参考下...2016-01-27- 这篇文章主要介绍了python Matplotlib模块的使用,帮助大家更好的利用python处理图像,感兴趣的朋友可以了解下...2020-09-16
- 这篇文章主要介绍了Python基于httpx模块实现发送请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-08
- 这篇文章主要介绍了Python通过fnmatch模块实现文件名匹配,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-01
Moto Z模块功能有什么用?一张图告诉大家Moto Z十个要点
9月6日下午,联想在北京发布了两款模块手机 Moto Z 和 Moto Z Play,同时与之搭配的还有五种可更换智能模块,那么Moto Z模块功能有什么用?下面小编用一张图来告诉大家Moto Z的十个要点,一起来看看吧...2016-09-12- 最近在做一个爬虫相关的项目,单线程的整站爬虫,耗时真的不是一般的巨大,运行一次也是心累,所以,要想实现整站爬虫,多线程是不可避免的,那么python多线程又应该怎样实现呢?今天小编给大家分享下实现代码,感兴趣的朋友一起看看吧...2021-05-20
- 今天小编就为大家分享一篇关于Pytorch的MLP模块实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-30
- 这篇文章主要介绍了Zend Framework动作助手Json用法,结合实例形式分析了Zend Framework动作助手Json的功能与相关使用技巧,需要的朋友可以参考下...2016-03-10
- 这篇文章主要介绍了Python ConfigParser模块的使用示例,帮助大家更好的理解和学习Python ConfigParser模块的用法,感兴趣的朋友可以了解下...2020-10-12
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
这篇文章主要介绍了Zend Framework教程之请求对象的封装Zend_Controller_Request用法,结合实例形式详细分析了请求对象封装的原理,使用方法与相关注意事项,需要的朋友可以参考下...2016-03-10