学习思路之ONETHINK
admin
2023-07-28 21:01:04
0

前段时间,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 ($items as &$val)

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

conf.tpl

 
// +----------------------------------------------------------------------

/**
 * 系统配文件
 * 所有系统级别的配置
 */
return array(
    /* 模块相关配置 */
    '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'       => '', // PATHINFO URL参数变量
    'URL_PATHINFO_DEPR'    => '/', //PATHINFO URL分割符

    /* 全局过滤配置 */
    '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

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

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

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

附录下他的InithookBehavior

class InitHookBehavior extends Behavior{
	public function run(&$content){
		if(defined('BIND_MODULE') && BIND_MODULE === 'Install') return ;

		$data = S('hooks');
		if(!$data){
			$hooks = M('Hooks')->getField('name,addons');
			foreach ($hooks as $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。


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


愿法界众生,皆得安乐

相关内容

热门资讯

知名女企业家郭恒华遭刑拘,曾参... 郭恒华被刑拘了。消息放出时,这位安徽知名的女企业家,还有不到十天就要迎来自己62岁生日。几天前,她掌...
疑似失窃铜像现身私人博物馆,官... 关于网传疑似失窃铜像线索核查的通报近日有网络消息反映,某博物馆展出的一尊铜像,疑似我管理处2000年...
“城”长的幸福·河南城市更新系... 从空中俯瞰濮阳世纪景苑社区。 张博 摄新乡市新兴社区党群服务中心,红马甲志愿者在岗服务。 冀超 摄南...
黄河科技学院:守好课堂主阵地,... 6月30日,全国高校思想政治网报道黄河科技学院:守好课堂主阵地,用好文化活教材——铸牢中华民族共同体...
男子上厕所不掀马桶圈,妻子跟擦... 近日,浙江衢州一对再婚十年的夫妻因为闹离婚,找来了当地的调解员。事情起因是,丈夫小便时总是弄脏马桶圈...
中央批准:唐洪武任中山大学校长 “微言教育”7月3日消息,日前,中央批准:唐洪武同志任中山大学校长(副部长级)、党委副书记。7月3日...
美国曾提醒伊朗,当心以色列暗杀... 陈立希美国《纽约时报》2日以知情美国官员为消息源报道,美国和伊朗今春着手谈判时,以色列可能仍在密谋暗...
40岁初婚的男女:爱情、算计与... 晚婚和晚育,开始成为当代社会的主流。根据人口普查年鉴,过去40年间,中国人初婚年龄平均推迟了整整5岁...
魔笛谢幕,古典中场的世界杯终章 澎湃新闻记者 张颖终场哨响,莫德里奇走向场边。二十年世界杯镜头里,那个从战火中走出的牧羊少年,如今已...