一歩一歩自分の軽量級MVCphpフレームワークを構築する-(二)国産軽量級フレームワークAmysqlソースコード分析(1)
7549 ワード
このフレームワークはPHPの友達「祥子」が紹介してくれたもので、Gitアドレスhttps://coding.net/u/srar/p/AMP/git
次に、エントリファイルの総スレッド(index.php)から分析を開始します.
これはプライマリ・エントリ・ファイルなので、ルート・ディレクトリ・アドレスROOT、システム・ディレクトリなど、グローバル変数を定義します.それからプロファイルやフレームワークのメインプロセス、内蔵関数をincludeで導入しました.
ここでお話ししますが、実は私の考えでは、フレームワークのこのような重要なファイルを導入するときはrequireを使用したほうがいいです.requireの場合、ファイルが存在しないと致命的なエラーが投げ出され、プログラムが終了しますが、includeは実行され続け、次のようなエラーが発生する可能性があります.また、include()文では、ファイルを実行するたびに読み取りと評価を行います.一方、require()では、ファイルは一度だけ処理されます.これは,複数回実行可能なコードであればrequire()の使用効率が高いことを意味する.
ローカルの説明:
① 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このファイルは分析することができないのはすべていくつかの変数を定義して、直接コードに行きました
次のセクションでは、Amysqlの主なプロセスを分析します.
次に、エントリファイルの総スレッド(index.php)から分析を開始します.
<?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で導入しました.
ここでお話ししますが、実は私の考えでは、フレームワークのこのような重要なファイルを導入するときはrequireを使用したほうがいいです.requireの場合、ファイルが存在しないと致命的なエラーが投げ出され、プログラムが終了しますが、includeは実行され続け、次のようなエラーが発生する可能性があります.また、include()文では、ファイルを実行するたびに読み取りと評価を行います.一方、require()では、ファイルは一度だけ処理されます.これは,複数回実行可能なコードであればrequire()の使用効率が高いことを意味する.
ローカルの説明:
① 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の主なプロセスを分析します.