この記事では主に 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; }_getRootPath($classname)関数は、クラス名に従って、クラス名ファイルが配置されている実際のディレクトリを取得しますヘッダー フィールドによって、クラスがどのディレクトリにあるかが決まります。これらのディレクトリでクラスが見つかった場合、クラスは使用前にロードされます。
以上がPHP フレームワークでクラスを自動的にロードするファイル原理の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。