ホームページ >php教程 >php手册 >PHP自動読み込みの2つの実装方法

PHP自動読み込みの2つの実装方法

WBOY
WBOYオリジナル
2016-06-13 12:14:53981ブラウズ

PHP を自動ロードするには 2 つの方法があります。
最初のオプションは __autoload を使用することです。
ただし、ファイルが存在するかどうかを判断するという未解決の問題が 1 つあります。

コードをコピーします コードは次のとおりです:


set_include_path('aa' . PATH_SEPARATOR . get_include_path()) ;
function __autoload($ className)
{
//この検出を追加すると、このファイルは現在のディレクトリにないため、ファイルの存在は検出されません。ただし、 include は成功します。
if (file_exists ($className . '.php')) {
include_once($className . '.php')
} else {
exit('no file') );
}
}
$a = new Acls();

2 番目のオプションは、spl を使用して自動的にロードします。
spl_autoload_register について詳しく説明します。 ()
簡単な例

コードをコピー コードは次のとおりです:

set_include_path('aa' . PATH_SEPARATOR) . get_include_path());
//function __autoload ($className)
//{
// if (file_exists($className . '.php')) {
// include_once($ className . '.php');
// exit('no file');
//}
>$a = new Acls();


spl_autoload_register() は、最初に spl_autoload() を自動的に呼び出し、パス内で小文字のファイル名を持つ「.php」プログラムを検索します。デフォルトの拡張子は「」です。 .ini" を作成し、spl_autoload_extensions() を使用して拡張機能名を登録することもできます。
見つからない場合は、
function loader1($class) 🎜>{
//読み込みコードを自分で書きます
}
functionloader2($class)
{
//loader1() が見つからない場合は、私が探しに来ます
}
spl_autoload_register('loader1');
spl_autoload_register('loader2');
さらに多くのことができます...
MVC フレームワークはどのように自動読み込みを実装しますか?
path
'include' => array( 'アプリケーション/カタログ/コントローラ', 'アプリケーション/カタログ/モデル', ),$include = array('アプリケーション/コントローラ', 'アプリケーション/モデル', 'アプリケーション/ライブラリ');
set_include_path(get_include_path() . PATH_SEPARATOR .implode(PATH_SEPARATOR, $config['include']));
URL を取得したら、コントローラーとメソッドを解析します。
次に、自動を設定します。ロード



コードをコピーします

コードは次のとおりです:

クラス ローダー { /**

* クラスを自動的にロードします

* @param $class クラス名
*/
パブリック静的関数 autoload($class)
{
$path = '';
$path = str_replace('_', '/', $class) '。 php';
include_once($path);
}
}
/**
* SQL 自動読み込み
*/
spl_autoload_register(array('Loader', 'autoload')); >

ルート、コントローラーのインスタンス化、メソッドの呼び出し、記述したものが実行を開始します



コードをコピーします


コードは次のとおりです:

/*** ルーティング */ public function Route()

{

if (class_exists($this->getController())) {
$rc = new ReflectionClass($this->getController());
if ($rc->hasMethod($this->getAction())) {
$controller = $rc->newInstance( );
$method = $rc->getMethod($this ->getAction());
$method->invoke($controller); else
('アクションなし');
} else
throw new Exception('nocontroller');


初期の自動ロードが完了しました

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