手机版

Zend的手动音量调节机制使用分析(一)

时间:2021-11-20 来源:互联网 编辑:宝哥软件园 浏览:

代码复制代码代码如下: $ front=Zend _ Controller _ front : getinstance();Zend _ Layout:startMvc(数组(' layout path '=USVN _ LAYOUTS _ DIR));$front-setRequest(新的USVN _ Controller _ Request _ Http());$ front-throw异常(真);$ front-SetBaseURl($ config-URl-base);$ Router=new Zend _ Controller _ Router _ Rewrite();$ ROUTES _ Config=new USVN _ Config _ Ini(USVN _ ROUTES _ Config _ FILE,USVN _ Config _ SECTION);$ router-addConfig($ routes _ config,' routes ');$前置路由器($ router);$ front-setcontrollerdirtory(USVN _ CONTROLLERS _ DIR);Zend _ Controller _ front :3360 getinstance()-dispatch();分析首先看下Zend _ Controller _ front : get instance是调用单例模式,实例化了它的内部属性_插件,实例化了一个Zend _控制器_插件_代理类。这个类是管理前面的插件的类。先看一个前面中的方法公共函数注册插件(Zend _ Controller _ Plugin _ Abstract $ Plugin,$ stackIndex=null)意思是如果你有一个自己的插件要插入使用的话,调用这个函数能把你自己的插件委托给Zend _控制器_插件_代理使用。如果你有愿望继续跟下去你会看到注册插件做的一件最根本的事情就是把请求和反应放入到你的插件中去(setRequest和setResponse)。类Zend _控制器_插件_代理扩展了Zend _控制器_插件_抽象这个实现了抽象类Zend _控制器_插件_摘要。Zend _控制器_插件_摘要是所有插件的抽象类,所有用户自己定义的插件或者阿维斯陀经注解已有的插件都要从这个类继承。这里就看到了,前端控制器前面就是使用经纪人作为用户插件注册。这个抽象类可以被实现的函数有

路由请求前调用了RoutestArtup : RoutesHutton:路由完成请求后调用了dispatchLoopStartup:在进入调度循环之前调用了Predispatch在调度程序分发操作之前,调用了postdispatch:DispatchLoopShutdown:由调度器分发后调用,进入调度循环后调用。我们还看到了两种方法,getRequest和getResponse,通过这两种方法我们可以分别从控制器获取请求对象和响应对象。好了,跑题了,回到初始代码。Zend _ controller _ front : GetInstance实际上注册了一个代理插件,并将其放在$front中。下面一行代码Zend _ layout:开始MVC(数组(' layout path '=usvn _ layout _ dir));在Zend/Layout.php中看到,startMvc做了两件事:首先,它调用自己的构造函数来实例化自己(记得把initMvc参数设为true),然后设置参数。Zend_Layout的构造函数比较复杂,看看里面就知道了。首先,设置传入的参数$options。在我们的例子中,我们传入了array([layout path]=/var/www/html/usvn/app/layout)作为选项,构造函数调用了$this-setOptions($options)。这个setOptions做的是根据数组的每个键调用$this-set$key($val)。也就是说,在上面的例子中,setOptions调用了setLayoutPath('/var/www/html/usvn/app/layout '),setLayoutPath的功能是将自己类的这个-_layout设置为'/var/www/html/usvn/app/layout ',然后将_enable设置为。请记住,这两个属性将在未来使用。回到Zend_Layout的构造函数,初始化选项后调用了_ initVarContainer();这个函数做这个事情:$ this-_ container=Zend _ view _ helper _ placeholder _ registry :3360 getregistry()-getcontainer(_ class _ _);出现了Zend _ view _ helper _ placeholder _ registry(我把它翻译成Zend视图助手注册表)。getRegistry()以Zend _ view _ helper _ placeholder _ Registry为键,在Zend_Registry中注册了一个Zend _ view _ helper _ placeholder _ Registry类的实例作为值。这个类的构造函数没有任何变化。GetRegistry()返回了Zend _ view _ helper _ placeholder _ registry的一个实例,因此下面调用了getContainer(__CLASS__)。这里有什么?当前调用的类自然是Zend_Layout。GetContainer('Zend_Layout ')进入GetContainer,它调用createContainer('Zend_Layout ')。CreateContainer('Zend_Layout ')是一个数组,在注册表中以Zend_Layout为键,以Zend _ view _ helper _ placeholder _ container类为值。Zend _ view _ helper _ placeholder _ container实现抽象类Zend _ view _ helper _ placeholder _ container _ abstract。这个抽象类实际上是一个ArrayObject,它在上一篇文章中提到过,与泛型类相同。好了,这里就不多说了。让我们回到Zend_Layout的构造函数_initVarContainer的结尾。这里有两个重要的函数叫做:$ this-_ setMvcEnabled(true);$ this-_ initMvc();每个人都必须熟悉Mvc。让我们看看它是如何设置的。设置这个-_mvcEnabled_initMvc做了两件事,_initPlugin和_initHelper。查看initPlugin:获取plugin lass,其中plugin lass是Zend _ layout _ controller _ plugin _ layout。你可以看到它是作为一个插件放进去的。然后,获得一个Zend_Controller_Front的例子,并调用:$ Front-register plugin(new $ plugin class($ this),99);还记得之前对Zend_Controller_Front的分析吗?还有registerPlugin的功能,将插件委托给前台的代理。有人会问接下来的99是什么意思。这是插件的索引顺序,后面的插件执行。查看_initHelper:获取helperClass,其中helperClass是Zend _ layout _ controller _ action _ helper _ layout if(!Zend _ Controller _ Action _ helper broker :3360哈希表('布局'){ .

Zend _ Controller _ Action _ helper broker :3360 getstack()-偏移量集(-90,新的$ helper类($ this));}如果Action_HelperBroker没有布局的助手的话就执行下面的偏移集命令。将-90和Zend _ Layout _控制器_动作_助手_布局实例作为参数传入。和插件同样的关系,将Zend _ Layout _控制器_动作_助手_布局实例作为价值存入到此-_helpersByPriority和此-_helpersByNameRef去了前面的-90是权重,也是要保证这个助手是最后调用(看最后一行是krsort排序)好了布局的构造函数就这样分析结束了。

版权声明:Zend的手动音量调节机制使用分析(一)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。