PHP フレームワークでクラスを自動的にロードするファイル原理の詳細な説明

怪我咯
リリース: 2023-03-10 14:12:02
オリジナル
1191 人が閲覧しました

この記事では主に 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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!