一步步搭建本身的輕量級MVCphp框架-(二)一個國產輕量級框架Amysql源碼分析(1)

這個框架是我一個作PHP的朋友「祥子」介紹給個人,Git地址https://coding.net/u/srar/p/AMP/gitphp

下面從入口文件 總線程 ( index.php )開始進行分析html

<?php

define ('_ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR);				// 網站根目錄
define ('_Amysql', _ROOT . 'Amysql' . DIRECTORY_SEPARATOR);				// 系統目錄
define ('_Controller', _ROOT . 'Controller' . DIRECTORY_SEPARATOR);		     // 控制器目錄
define ('_Model', _ROOT . 'Model' . DIRECTORY_SEPARATOR);				// 模型目錄
define ('_Class', _ROOT . 'Class' . DIRECTORY_SEPARATOR);				// 對象類目錄
define ('_View', _ROOT . 'View' . DIRECTORY_SEPARATOR);					// 視圖模板目錄
define ('_PathTag', '/');								// 載入下級目錄文件標識 例如: 需載入 Model/user/vip.php 即便用 _mode('user/vip');

define ('_Host', (empty($_SERVER["HTTPS"]) || $_SERVER['HTTPS'] == 'off' ? 'http://' : 'https://') . $_SERVER['HTTP_HOST']);		// 主機網址
define ('_Http', _Host . str_ireplace('/index.php', '', $_SERVER['SCRIPT_NAME']) . '/');			// 網站根目錄網址

include(_Amysql . 'Config.php');  //配置文件
include(_Amysql . 'Amysql.php');  //網站進程
include(_Amysql . 'Function.php'); //內置函數

$Amysql = new Amysql();
$Amysql -> AmysqlProcess = new AmysqlProcess();	
$Amysql -> AmysqlProcess -> ProcessStart();
$Amysql -> AmysqlProcess -> ControllerStart();

?>

這是主入口文件,所以就定義了一些全局變量,好比根目錄地址ROOT,系統目錄啊什麼的。而後就把配置文件啊,框架主進程啊,內置函數啊使用include引入進來了。mysql

在這裏我要說一下,其實按照個人想法,引入框架中的這種重要文件時仍是使用require比較好,由於require時若是文件不存在會拋出一個致命性錯誤,將程序終止掉,可是include會繼續執行,可能會形成下面更多的錯誤,並且對include()語句來講,在執行文件時每次都要進行讀取和評估;而對於require()來講,文件只處理一次。這就意味着若是可能執行屢次的代碼,則使用require()效率比較高。git

局部解釋:sql

① dirname(__FILE__):__FILE__這是PHP的一個內置魔術變量,做用就是返回當前文件所在地址,dirname(__FILE__)做用就是返回當前文件所在目錄地址。數據庫

 

② DIRECTORY_SEPARATOR:這是因爲在Windows環境中目錄的分割線爲"\",而Linux中是"/",這就形成了框架在不一樣環境中不適用的問題,因此使用DIRECTORY_SEPARATOR來自動判斷是使用"\"仍是"/"。緩存

 

③ empty($_SERVER["HTTPS"])||$_SERVER["HTTPS"]=='off':網上有一部分PHPer不是很理解何時$_SERVER["HTTPS"]=='off',在這裏給解釋一下,若是腳本是經過 HTTPS 協議被訪問,則被設爲一個非空的值,因此就有了前面的那一個判斷,須要注意的是當使用 IIS 上的ISAPI 方式時,若是不是經過 HTTPS 協議被訪問,這個值將爲 off框架

還有$_SERVER["HTTPS"]我我的認爲轉換一下大小寫,所有使用小寫比較好 strtolower($_SERVER['HTTPS'])函數

 

④ str_ireplace:str_replace的忽略大小寫版本。網站

⑤ $_SERVER["SCRIPT_NAME"]:包含當前腳本的路徑。這在頁面須要指向本身時很是有用。與__FILE__ 常量不一樣的地方在於__FILE__包含當前腳本(例如包含文件)的完整路徑和文件名。 

 

 

下面是配置文件 ./Amysql/Config.php 這個文件沒什麼好分析的 都是定義了一些變量,直接上代碼了

<?php

// 系統基本配置 **********************************************
$Config['HttpPath'] = false;                // 是否開啓 index.php/Controller/Action/name/value 模式
$Config['Filter'] = true;                    // 是否過濾 $_GET、$_POST、$_COOKIE、$_FILES
$Config['XSS'] = true;                        // 是否開啓 XSS防範
$Config['SessionStart'] = true;                // 是否開啓 SESSION
$Config['DebugPhp'] = true;                // 是否開啓PHP運行報錯信息
$Config['DebugSql'] = false;                // 是否開啓源碼調試Sql語句
$Config['CharSet'] = 'utf-8';                // 設置網頁編碼
$Config['UrlControllerName'] = 'c';            // 自定義控制器名稱 例如: index.php?c=index
$Config['UrlActionName'] = 'a';                // 自定義方法名稱 例如: index.php?c=index&a=IndexAction                        
$Config['Index'] = 'index.php';                // 入口文件
$Config['CacheType'] = 'Memcache';                //緩存類型 File, Memcache

// 默認使用數據庫配置 *****************************************

$Config['ConnectTag'] = 'default';                // Mysql鏈接標識 可同時進行多鏈接
$Config['Host'] = 'localhost';                    // Mysql主機地址
$Config['User'] = 'root';                        // Mysql用戶
$Config['Password'] = 'root';                    // Mysql密碼
$Config['DBname'] = 'test';                        // 數據庫名稱

// 文件緩存配置 **********************************************
$Config['CacheFileDir'] = './Cache/';            // 文件緩存路徑
$Config['CacheDefaultTime'] = 3600;                // 默認緩存時間

// Memcache緩存配置  ****************************************
$Config['MemcacheHost'] = '127.0.0.1';            // Memcache主機地址
$Config['MemcachePort'] = 11211;                // Memcache主機端口

下一節將分析Amysql的主要進程~ 

相關文章
相關標籤/搜索