前段时间,ThinkPHP 的整体设计思路,包括 各个模块的实现。

TP官方为了测试该框架,写了一个ONEThink,是可以学习下的


不太推荐使用这个,感觉就是测试性质。但是你可以体会下他的设计思路,继续深化思考,就可以重新写一个适合自己的。


比如:测试各种环境,用数组组合一下数据信息

$items=array('os'=>array('操作系统','不限制','类Unix',PHP_OS,'success'),'php'=>array('PHP版本','5.3','5.3+',PHP_VERSION,'success'),'upload'=>array('附件上传','不限制','2M+','未知','success'),'gd'=>array('GD库','2.0','2.0+','未知','success'),'disk'=>array('磁盘空间','5M','不限制','未知','success'),);

然后可以利用引用来实现数据的实时更改

foreach($itemsas&$val)

再比如:自动化的一些思路,写好一部分配置文件或者SQL语句或者输出文件的模板,然后替换一部分信息

conf.tpl

<?php//+----------------------------------------------------------------------//|OneThink[WECANDOITJUSTTHINKIT]//+----------------------------------------------------------------------//|Copyright(c)2013http://www.onethink.cnAllrightsreserved.//+----------------------------------------------------------------------//|Author:麦当苗儿<zuojiazi@vip.qq.com><http://www.zjzit.cn>//+----------------------------------------------------------------------/***系统配文件*所有系统级别的配置*/returnarray(/*模块相关配置*/'AUTOLOAD_NAMESPACE'=>array('Addons'=>ONETHINK_ADDON_PATH),//扩展模块列表'DEFAULT_MODULE'=>'Home','MODULE_DENY_LIST'=>array('Common','User','Admin','Install'),//'MODULE_ALLOW_LIST'=>array('Home','Admin'),/*系统数据加密设置*/'DATA_AUTH_KEY'=>'[AUTH_KEY]',//默认数据加密KEY/*用户相关设置*/'USER_MAX_CACHE'=>1000,//最大缓存用户数'USER_ADMINISTRATOR'=>1,//管理员用户ID/*URL配置*/'URL_CASE_INSENSITIVE'=>true,//默认false表示URL区分大小写true则表示不区分大小写'URL_MODEL'=>3,//URL模式'VAR_URL_PARAMS'=>'',//PATHINFOURL参数变量'URL_PATHINFO_DEPR'=>'/',//PATHINFOURL分割符/*全局过滤配置*/'DEFAULT_FILTER'=>'',//全局过滤函数/*数据库配置*/'DB_TYPE'=>'[DB_TYPE]',//数据库类型'DB_HOST'=>'[DB_HOST]',//服务器地址'DB_NAME'=>'[DB_NAME]',//数据库名'DB_USER'=>'[DB_USER]',//用户名'DB_PWD'=>'[DB_PWD]',//密码'DB_PORT'=>'[DB_PORT]',//端口'DB_PREFIX'=>'[DB_PREFIX]',//数据库表前缀/*文档模型配置(文档模型核心配置,请勿更改)*/'DOCUMENT_MODEL_TYPE'=>array(2=>'主题',1=>'目录',3=>'段落'),);

然后写一部分替换

$conf=str_replace('[AUTH_KEY]',$auth,$conf);$user=str_replace('[AUTH_KEY]',$auth,$conf);

或者说起来的替换或者读取执行

//读取SQL文件$sql=file_get_contents(MODULE_PATH.'Data/install.sql');$sql=str_replace("\r","\n",$sql);$sql=explode(";\n",$sql);//替换表前缀$orginal=C('ORIGINAL_TABLE_PREFIX');$sql=str_replace("`{$orginal}","`{$prefix}",$sql);

再比如:TP的扩展最核心的就是Behavior

写一个tags.php

returnarray('app_init'=>array('Common\Behavior\InitHookBehavior'));

这样就可以使用你想用的组件来进行模板解析,各种权限管理,路由控制,应用的前置后置处理,一些横向切面的工具

这样就可以动态加进来很多组件,也就实现了扩展,你的框架的核心不在于组件,而是你如何让数据流动,组合,以及讲故事。这是程序最值得称赞地方

附录下他的InithookBehavior

classInitHookBehaviorextendsBehavior{publicfunctionrun(&$content){if(defined('BIND_MODULE')&&BIND_MODULE==='Install')return;$data=S('hooks');if(!$data){$hooks=M('Hooks')->getField('name,addons');foreach($hooksas$key=>$value){#code...if($value){$map['status']=1;$names=explode(',',$value);$map['name']=array('in',$names);$data=M('Addons')->where($map)->getField('id,name');if($data){$addons=array_intersect($names,$data);Hook::add($key,array_map('get_addon_class',$addons));}}}S('hooks',Hook::get());}else{Hook::import($data,false);}}}//附加组件addons//由钩子去附件里面去找相应的组件


这就涉及到自动化运维的感觉,这就让人想起来python。


就写这么多吧,技术是属于每个人的,每个人的潜力不同,我们身边有很多人的兴趣点也是不一样的。照顾好自己的生活身体之后,前往顶峰。


愿法界众生,皆得安乐