`
yangyz1984
  • 浏览: 34821 次
  • 性别: Icon_minigender_1
  • 来自: 安徽省
社区版块
存档分类
最新评论

Zend_Application

阅读更多



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

 

  • 大小: 184.4 KB
分享到:
评论

相关推荐

    Zend_Db_Adapter_Mysql 和 Zend_Db_Statement_Mysql

    不支持PDO 、MYSQLI的空间也可以用ZEND框架了 解包后到 Zend 的框架目录 library\Zend\Db 在PHP程序里 $db = Zend_Db::factory('Mysql', $params); 即把原来的 PDO_MYSQL 等改成 Mysql

    ZEND FRAMEWORK 1.11.7 中文参考文档

    •Zend_Application •Zend_Auth •Zend_Barcode •Zend_Cache •Zend_Captcha •SimpleCloud API: Zend_Cloud •Zend_CodeGenerator •Zend_Config •Zend_Config_Writer •Zend_Console_Getopt •Zend_...

    Zend Framework教程之Application用法实例详解

    在本文中,我们将深入探讨 Zend Framework 中的 Zend_Application,这是一个至关重要的组件,它为框架应用程序提供了基础结构和启动流程。Zend_Application 作为程序的入口点,主要负责两件关键的事情:初始化PHP...

    zend_acl的例子

    `library`目录可能包含了`Zend_Acl`的相关类,`bin`和`public`目录可能分别包含命令行工具和前端资源,而`application`目录则包含了应用程序的逻辑,如控制器和模型,它们可能与`Zend_Acl`的使用有关。 总之,`Zend...

    Zend Framework教程之Zend_Layout布局助手详解

    在这个项目中,加入了layout功能,具体操作是在应用配置文件中,即layout_demo2/application/configs/application.ini中加入必要的配置指令来指定控制器目录、关闭异常显示以及指定布局文件路径。 布局文件通常位于...

    ZendFramework安装1.11版

    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initView() { $view = new Zend_View(); $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('...

    zend framework中英文手册合集

    Zend_Config 提供了灵活的方式来管理应用程序配置,而 Zend_Application 和 Zend_Injector 实现了依赖注入,允许动态组装对象并注入依赖,提升代码的可测试性和可维护性。 通过深入学习 Zend Framework 的中英文...

    Zend Framework教程之Application和Bootstrap用法详解

    本文实例讲述了Zend Framework教程之Application和Bootstrap用法。分享给大家供大家参考,具体如下: 在一个MVC应用程序中,我们需要初始化建立数据库链接,配置视图和视图助手,配置布局,注册相关插件,注册action...

    zend framwork2 入口文件已经请求原理分析

    `APPLICATION_PATH`设置为相对于入口文件的`application`目录的绝对路径,而`APPLICATION_ENV`则根据环境变量或默认值确定当前的运行环境(如开发、生产等)。 #### B. 配置环境目录 `set_include_path`函数用于...

    Zend Framework教程之Resource Autoloading用法实例

    本文实例讲述了Zend Framework中Resource Autoloading用法。分享给大家供大家参考,具体如下: 通常,在开发应用程序中,可能类文件名不能...$loader = new Zend_Application_Module_Autoloader(array( 'namespace'

    zendframework官方入门手册[收集].pdf

    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { } ``` ### 4. 配置(Configuration) 尽管Zend Framework本身不需要配置,但通常需要为应用程序设置配置。默认的配置文件是`application/configs...

    Zend_Framework框架安装与配置(PHP中文学习资料).pdf

    defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); ``` 通过上述步骤,我们可以成功地安装和配置Zend Framework框架,为后续的Web应用开发打下坚实的...

    Zend Framework 2 Application Development

    Zend Framework 2 Application Development is a hands-on guide to building your application. We will explore the components of this new version of the framework and discover how to use each component, ...

Global site tag (gtag.js) - Google Analytics