ホームページ  >  記事  >  バックエンド開発  >  PHP フレームワークでクラスを自動的にロードするファイル原理の詳細な説明

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

怪我咯
怪我咯オリジナル
2017-06-16 10:42:281243ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。