溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

學習思路之ONETHINK

發布時間:2020-07-18 11:10:52 來源:網絡 閱讀:991 作者:jackdongting 欄目:開發技術

前段時間,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

<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: 麥當苗兒 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
// +----------------------------------------------------------------------

/**
 * 系統配文件
 * 所有系統級別的配置
 */
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。


就寫這么多吧,技術是屬于每個人的,每個人的潛力不同,我們身邊有很多人的興趣點也是不一樣的。照顧好自己的生活身體之后,前往頂峰。


愿法界眾生,皆得安樂

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女