この記事では主に PHP フレームワークによるクラス ファイルの自動ロードの原理を詳しく紹介します。興味のある方は参考にしてください。
会社のプロジェクト PHP は中間転送層として使用されます。 http リクエストの受信、C++ との通信にソケットを使用するなど)、フレームワークを使用していないコードなので、これらは当然前の人が書いたものです。最近、この最下層を最適化する必要があるため、コードのこの部分を調べてみました。目的:
このコードの主な機能は、メイン ディレクトリ内のすべてのプラグイン クラスを一度にロードすることです。まだ定義されていないクラスとインターフェイスを自動的にロードします。オートローダーを登録すると、スクリプト エンジンは、PHP がエラーで失敗する前に、必要なクラスをロードする最後のチャンスを得ることができます。実装方法:
主にPHP関数__autoload()を使用します詳細:
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); set_include_path($_SERVER['Root_Path'] . '/libs' . PATH_SEPARATOR . $_SERVER['Root_Path'] . '/lib' . PATH_SEPARATOR . get_include_path() ); if (!function_exists('__autoload')) { function __autoload($className) { ///优化包含路径 $path=_getRootPath($className); $revpath=strtr($className, '_', '/'). '.php'; $rootpath=$path.$revpath; file_exists($rootpath)?include($rootpath):@include($revpath); } } /** *得到根路径* */ function _getRootPath($classname) { $pearpath=$_SERVER["PHP_PEAR_PATH"].'/'; $libpath=$_SERVER['Root_Path'] . '/lib/'; $libspath=$_SERVER['Root_Path'] . '/libs/'; if(strpos($classname,'Zend_')===0) return $pearpath; ///zend 框架路径 if(strpos($classname,'DB_')===0 || strpos($classname,'Interface_')===0 || strpos($classname,'Others_')===0 || strpos($classname,'Pay_')===0 || strpos($classname,'PHPMailer_')===0 ) return $libspath; return $libpath; }
以上がPHP フレームワークでクラスを自動的にロードするファイル原理の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。