這個框架是我一個作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的主要進程~