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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值