zend历程 之 ZendFramework-1.0.3

 更新时间:2016年11月25日 16:10  点击:2224



将从官方网上下载下来的ZendFramework-1.0.3,一试,发现不行,
较ZendFramework-1.0.2一比
 
原来是改动了一些如:
function __autoload($class){
   Zend_Loader::loadClass($class);
}
已经不能再用,报错找不了控制器。
现在用的是:
Zend_Loader::registerAutoload(); //自动加载类,使用时,直接实例化使用
其它的都没有什么变,我就不多说了!
 
带上一网址:
http://www.diybl.com/course/4_webprogram/php/phpshil/200727/12436_3.html

今天发现自己原来上当啊,郁闷啊……

 在一开始看zend框架时,感觉好象谁告诉我就入口文件(index.php)一定要放在网站的有基地址上!
然后我就累不拉急的把 htdocs文件夹 (我用的是xampp安装包安装的,据说这个就是基地址的目录,呵) 下的所有文件都移走了,然来把zend的请进来,一试,成功了,呵呵,心里还老高兴了。

后来发现这样的话,我这台电脑不是只能有一个网站了吗?因为所有的都是从这个zend里的index.php开始的啊?不爽,上网搜了一圈,功夫不负 search 人!给我找到了,哈哈,
基本做法是这样的:
1.将你的网站文件移到你想的文件夹下,如 zend

2. 在C:WINDOWSsystem32driversetchosts 加一个域名, 如

.......
127.0.0.1 zendhost

其实也就是本地解析一个域名了

3.在apacheconfhttpd.conf 文件的最后加上:
............
NameVirtualHost 127.0.0.1
<VirtualHost 127.0.0.1>
        ServerName zendhost
        DocumentRoot D:xampphtdocszend
        RewriteEngine On
</VirtualHost>

OK,重启,在地址栏里输入:zendhost 回车,搞定爽啊,

终于可以了,可是可笑的就在这里,今天从同事里那才现在。原来,本来就没有那有复杂,其实任意放在一个文件夹下,在地址栏里输:如 127.0.0.1/zendhost 就可以了,呵呵,我真是苯啊!我后来再看了一下代码,原来是我在 index.php 里多加了一句话:

$controller->setBaseUrl(''/''); 所以所有的请来都转到根目录了!



< 从入门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 了)

 

控制器就是保存在 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面向对象。

现在假设我们来用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。

可以通过构造函数和析构函数来自动处理:

SyntaxHighlighter.highlight();

[!--infotagslink--]

相关文章