zoukankan      html  css  js  c++  java
  • Zend_Application

    Zend Framework 版本1.10

    Zend_Application把应用程序进行抽象包装。其功能职责是加载应用程序配置,并对应用程序进行引导。

    Zend/Application包类图大概如下:

     

    如何使用Zend_Application类。

     新建一个Zend_Application对象

    $application = new Zend_Application(
    APPLICATION_ENV
    ,
    APPLICATION_PATH
    . '/configs/application.ini'
    );

     Zend_Application类的构造函数中包含了两个参数。一个是环境定义,另一个是配置项。

    环境定义是你自己定义的一个字符串。配置项可以是一个数组,一个Zend_Config实例,或者是一个文件名的字符串(Ini文件,inc文件,php文件或者Xml文件)

    构造函数中定义了Zend_Application对象的环境,初始化Zend_Loader_Autoloader的单例,并根据传入的配置,加载配置信息。

    新建完Zend_Application对象后,便可对它进行引导了。

    $application->bootstrap();

     Zend_Application 实际上是把引导方法转发给 Zend_Application_Bootstrap_BootstrapAbstract

    Zend_Application 与Zend_Application_Bootstrap_BootstrapAbstract 类是聚合关系。什么是聚合关系呢?(此处省略一千字,详细见http://ir.hit.edu.cn/~car/programming/rup/process/modguide/md_aggrg.htm

    总而言之,也就是说Zend_Application中包含了一个Zend_Application_Bootstrap_BootstrapAbstract(或者说是一个Zend_Application_Bootstrap_BootstrapAbstract的引用 )事实上,Zend_Application_Bootstrap_BootstrapAbstract中也包含了一个Zend_Application的引用 。他们就是通过这个引用进行相互通信的。

    当调用Zend_Application的bootstrap()方法时, Zend_Application会先实例化一个Zend_Application_Bootstrap_BootstrapAbstract的子类对象(默认是Zend_Application_Bootstrap_Bootstrap) 。

    Zend_Application_Bootstrap_Bootstrap在初始化时,会先取得 Zend_Application中的配置信息。并根据配置信息,初始化相应的引导资源类。  

    Zend/Application/Resource包中包含了一系列的引导资源。每个引导资源类负责对应用的某个资源的初始化。如Zend_Application_Resource_Db负责初始化应用程序的数据库类,而Zend_Application_Resource_Log则负责初始化应用程序的日志类。引导资源类实现了Zend_Application_Resource_Resource接口,继承自Zend_Application_Resource_ResourceAbstract。

     Zend_Application把bootstrap()方法转发给Zend_Application_Bootstrap_Bootstrap ,在Zend_Application_Bootstrap_Bootstrap的bootstrap()中,遍历注册了的引导资源的并调用引导的init()方法。

    如果要写一个简化版,大概就是这样:

    代码
    //应用程序类
    class App
    {
    protected $_bootstrap;

    public function bootstrap()
    {
    $this->_bootstrap = new BootStrap($this);
    $this->_bootstrap->bootstrap();
    }
    }

    //引导类
    class BootStrap
    {
    protected $_app;

    protected $_resources;

    public function __construct($app)
    {
    $this->_app = $app;
    $this->_createResources($app->getOptions());
    }

    protected function _createResources($option)
    {
    //根据配置注册相应的引导资源类并array_push至$this->_resources数组中
    }

    public function bootstrap()
    {
    foreach($this->_resources as $resource){
    $resource->init();
    }
    }
    }

    //引导资源抽象类
    class ResourceAbstract
    {
    public function init()
    {
    //do some thing
    }
    }

     因为Zend_Application_Bootstrap_Bootstrap类可以根据配置项生成不同的引导资源类,所以,我们就不用去写太多的代码了。只要写好一个配置文件就OK,例如我们要数据库类:在config.ini中可以这样写

    代码
    [yourenvironment]
    resources.db.adapter
    = PDO_MYSQL
    resources.db.params.host
    = localhost
    resources.db.params.username
    = root
    resources.db.params.password
    = password
    resources.db.params.dbname
    = testUser

    这样Zend_Application_Bootstrap_Bootstrap就会在程序引导时,自动初始化数据库类。

    关于配置文件如何写?

    请其它大侠有时间写。

    引导完应用程序类,然后可以运行

    $application->run();

    当然,可以用连缀语法,引导和运行一起

    $application->bootstrap()->run();

    Zend_Application类其实也是把run()请求转发给Zend_Application_Resource_ResourceAbstract类,也就是调用Zend_Application_Resource_ResourceAbstract的run()方法。

    可别以为Zend_Application就是个懒汉了,每个类都有其自身的使命所在(单一职责原则),过于热心什么都做只会使类变得过于宠大和把管理弄得一团糟。例如你到银行,保安负责把关,柜台人员负责存取款,贷款找业务人员,不同的人负责不同的事,不可能同一个人负责所有的事(如果一个人会所有事情,那他得学多少呀。如果是一个类,那得多么庞大呀。。)。如果你对保安说你要存款,保安会把你的请求转发给柜台人员,由柜台人员执行存款的请求(职责链模式)。

  • 相关阅读:
    js获取屏幕大小
    获取系统开机的时间(Windows、Linux)
    C++的STL中vector内存分配方法的简单探索
    服务器端如何判断客户端是不是手机
    测试简单for循环的效率
    多少钱都买不到这张表!百万都买不到这张表
    Unable to compile class for JSP
    windows上java中文乱码-指定字符集 -Dfile.encoding=UTF-8
    google翻译插件安装
    工作任务分配时的五个问题
  • 原文地址:https://www.cnblogs.com/rexy/p/1734406.html
Copyright © 2011-2022 走看看