仓酷云

标题: PHP网页编程之ThinkPHP使用形式扩大之谜 [打印本页]

作者: 透明    时间: 2015-1-16 22:11
标题: PHP网页编程之ThinkPHP使用形式扩大之谜
多个成员之间重复做相同的工作,很容易因为交流沟通的时候没有进行一致性的文档要求而出现不明错误,严重影响开发进度,导致在预定时间内无法完成该项目或者完成的项目跟原先计划所要实现的项目功能不符合。

ThinkPHP使用形式供应了对中心框架举行改革的时机,可让你的使用顺应更多的情况和分歧的需求。每一个使用形式都有本人的形式界说文件,绝对与ThinkPHP3.1版本,ThinkPHP3.2版本对使用形式的扩大加倍明白和明晰,在ThinkPHP3.1版本中界说了Cli、Lite、Thin、AMF、PHPRPC、REST形式,其界说体例和ThinkPHP3.2版本的体例迥然不同,若有必要能够参考修正,个中Cli形式被ThinkPHP框架内置,不必独自界说Cli形式便可一般利用,如必要更细化调剂能够参考3.1版编写的Cli运转形式扩大。ThinkPHP一样供应了便利的开辟情况和正式情况的形式切换体例。让我们跟着ThinkPHP的运转流程剖析其使用形式扩大之谜。

1、使用形式的利用

在研讨使用形式扩大之前,看看怎样利用使用形式的吧。一样平常经由过程在出口文件界说常量APP_MODE为使用形式称号,可是在剖析ThinkPHP框架出口文件时,懂得到框架默许接纳形式为一般形式(common),并且能够主动辨认sae情况,固然条件是没有界说APP_MODE常量时,固然ThinkPHP能够主动辨认CLI和CGI形式,而且在CLI和CGI情况下运转ThinkPHP框架在默许形式中主动对这两种情况做了渺小调剂,固然也能够本人扩大这两种使用形式。

  1. if(function_exists(saeAutoLoader)){//主动辨认SAE情况defined(APP_MODE)ordefine(APP_MODE,sae);defined(STORAGE_TYPE)ordefine(STORAGE_TYPE,Sae);}else{defined(APP_MODE)ordefine(APP_MODE,common);//使用形式默许为一般形式defined(STORAGE_TYPE)ordefine(STORAGE_TYPE,File);//存储范例默许为File}
复制代码

2、使用形式界说

在ThinkPHP框架傍边除ThinkPHP框架出口和框架引诱类之外,基础一切其他功效都能够经由过程使用形式举行变动和扩大,假如我们要增添一个使用形式,只必要在ThinkPHPMode目次上面界说一个形式界说文件便可,我们能够经由过程剖析common形式举行进修。

  1. //文件路径:ThinkPHP/Mode/common.php/***ThinkPHP一般形式界说*界说一个形式文件,只必要前往一个形式包括文件的数组便可*在数组中次要包括4种扩大文件列表:*config为默许加载设置文件列表*alias为中心类库别号设置列表*core必要加载的中心函数和类文件列表*tags举动设置列表**假如在使用形式界说中加载一个自定类,谁人自界说类的定名空间必需是Think*/returnarray(//设置文件config=>array(THINK_PATH.Conf/convention.php,//体系常规设置CONF_PATH.config.php,//使用大众设置),//别号界说alias=>array(ThinkLog=>CORE_PATH.Log.EXT,ThinkLogDriverFile=>CORE_PATH.Log/Driver/File.EXT,ThinkException=>CORE_PATH.Exception.EXT,ThinkModel=>CORE_PATH.Model.EXT,ThinkDb=>CORE_PATH.Db.EXT,ThinkTemplate=>CORE_PATH.Template.EXT,ThinkCache=>CORE_PATH.Cache.EXT,ThinkCacheDriverFile=>CORE_PATH.Cache/Driver/File.EXT,ThinkStorage=>CORE_PATH.Storage.EXT,),//函数和类文件core=>array(THINK_PATH.Common/functions.php,COMMON_PATH.Common/function.php,CORE_PATH.Hook.EXT,CORE_PATH.App.EXT,CORE_PATH.Dispatcher.EXT,//CORE_PATH.Log.EXT,CORE_PATH.Route.EXT,CORE_PATH.Controller.EXT,CORE_PATH.View.EXT,BEHAVIOR_PATH.BuildLiteBehavior.EXT,BEHAVIOR_PATH.ParseTemplateBehavior.EXT,BEHAVIOR_PATH.ContentReplaceBehavior.EXT,),//举动扩大界说tags=>array(app_init=>array(BehaviorBuildLiteBehavior,//天生运转Lite文件),app_begin=>array(BehaviorReadHtmlCacheBehavior,//读取静态缓存),app_end=>array(BehaviorShowPageTraceBehavior,//页面Trace显现),view_parse=>array(BehaviorParseTemplateBehavior,//模板剖析撑持PHP、内置模板引擎和第三方模板引擎),template_filter=>array(BehaviorContentReplaceBehavior,//模板输入交换),view_filter=>array(BehaviorWriteHtmlCacheBehavior,//写进静态缓存),),);
复制代码

我们看到这个一般使用形式代码以后,有点了然ThinkPHP的使用形式扩大是怎样回事了,可是仍是知其但是不知其以是然,界说一个加载文件列表和设置是怎样改动框架中心的呢?奥密就在ThinkPHPK引诱类中,让我们再回忆以下吧!

  1. //判别是不是存在core.php设置文件(这是开辟情况一时界说的运转形式,我是这么了解的)//否者加载APP_MODE界说的形式文件$mode=includeis_file(CONF_PATH.core.php)?CONF_PATH.core.php:MODE_PATH.APP_MODE..php;//加载形式中core界说的中心文件列表foreach($mode[core]as$file){if(is_file($file)){include$file;if(!APP_DEBUG)$content.=compile($file);}}//加载形式中界说的config设置文件列表foreach($mode[config]as$key=>$file){is_numeric($key)?C(include$file):C($key,include$file);}//读取以后使用形式对应的设置文件if(common!=APP_MODE&&is_file(CONF_PATH.config_.APP_MODE..php))C(includeCONF_PATH.config_.APP_MODE..php);//加载形式中alias别号列表界说if(isset($mode[alias])){self::addMap(is_array($mode[alias])?$mode[alias]:include$mode[alias]);}//加载使用别号界说文件if(is_file(CONF_PATH.alias.php))self::addMap(includeCONF_PATH.alias.php);//加载形式中tags举动界说if(isset($mode[tags])){Hook::import(is_array($mode[tags])?$mode[tags]:include$mode[tags]);}//加载使用举动界说if(is_file(CONF_PATH.tags.php))//同意使用增添开辟形式设置界说Hook::import(includeCONF_PATH.tags.php);//加载框架底层言语包L(includeTHINK_PATH.Lang/.strtolower(C(DEFAULT_LANG))..php);
复制代码

经由过程ThinkPHP::start()中的这段代码,完善无缝联系关系的形式界说文件的意义与完成办法。

3、界说复杂的运转形式

手册中有一个形式扩大到的实例,能够拿到这里来剖析一下,界说一个lite简便运转形式,起首在ThinkPHP/Mode目次下新建一个lite.php文件内容界说以下:

  1. returnarray(//设置文件config=>array(THINK_PATH.Conf/convention.php,//体系常规设置CONF_PATH.config.php,//使用大众设置),//别号界说alias=>array(ThinkException=>CORE_PATH.Exception.EXT,ThinkModel=>CORE_PATH.Model.EXT,ThinkDb=>CORE_PATH.Db.EXT,ThinkCache=>CORE_PATH.Cache.EXT,ThinkCacheDriverFile=>CORE_PATH.Cache/Driver/File.EXT,ThinkStorage=>CORE_PATH.Storage.EXT,),//函数和类文件core=>array(MODE_PATH.Lite/functions.php,COMMON_PATH.Common/function.php,MODE_PATH.Lite/App.EXT,MODE_PATH.Lite/Dispatcher.EXT,MODE_PATH.Lite/Controller.EXT,MODE_PATH.Lite/View.EXT,CORE_PATH.Behavior.EXT,),//举动扩大界说tags=>array(view_parse=>array(BehaviorParseTemplate,//模板剖析撑持PHP、内置模板引擎和第三方模板引擎),template_filter=>array(BehaviorContentReplace,//模板输入交换),),);
复制代码

从下面的设置傍边我们发明core中的中心文件年夜多半都被交换了,固然这些必要被交换的程序功效必要我们本人往完成,不外倡议人人间接拷贝一般形式中界说的中心文件过去修正。接上去我们来完成以下ThinkPHP使用开辟中的中心类库扩大文件App.class.php

在ThinkPHP/Mode目次下创建一个Lite目次并在lite目次下创建App.class.php文件,以下是程叙文件的完成:

  1. //形式扩大类库必需是Think定名空间namespaceThink;/***ThinkPHP使用程序类实行使用历程办理Lite形式扩大类*完成ThinkPHP中心类库扩大时,尽量仿制原有类库完成(除非对ThinkPHP框架源码出格懂得)*由于在其他没有扩大的中心文件中大概会挪用扩大的中心类文件中的某个办法,除非你盘算全体扩大*/classApp{/***使用程序初始化*@accesspublic*@returnvoid*/staticpublicfunctioninit(){//详细实际}/***实行使用程序*@accesspublic*@returnvoid*/staticpublicfunctionexec(){//详细完成}/***运转使用实例出口文件利用的快速办法*@accesspublic*@returnvoid*/staticpublicfunctionrun(){//详细完成}staticpublicfunctionlogo(){//详细完成}}
复制代码
当文件一切扩大文件的完成后,能够在框架出口文件界说APP_MODE常量为lite。

在这里吐槽以下官方:本节手册傍边竟然要界说MODE_NAME常量来改动运转形式,为了正确性无法在ThinkPHP框架全体文件中搜刮MODE_NAME,了局都没有才放下一个悬着的心。这是之前3.1版本中界说运转形式的办法,手册更新细节成绩(声明一下我如今用的手册是3.2.12014年2月14日的版本)。


在一个团队之中或者说是在一个公司的工作岗位上,需要注重团队之间的交流合作;在学习或工作上都要端正自己的态度,要以认真的态度来对每件事,这样才能让自己更快的投入、更快的学习,而不至于浪费自己的时间。
作者: 小魔女    时间: 2015-1-18 22:23
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
作者: 再现理想    时间: 2015-1-25 11:31
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
作者: 深爱那片海    时间: 2015-2-2 21:59
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
作者: 再见西城    时间: 2015-2-8 08:49
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
作者: 因胸联盟    时间: 2015-2-25 06:49
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
作者: 小女巫    时间: 2015-3-7 17:43
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
作者: 飘飘悠悠    时间: 2015-3-15 10:37
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2