ホームページ >php教程 >php手册 >PHPクラスの自動ロード機構

PHPクラスの自動ロード機構

WBOY
WBOYオリジナル
2016-09-19 08:54:591069ブラウズ

php:

の自動読み込み

php5より前は、特定のクラスやクラスメソッドを使いたい場合、クラスを使うたびにインクルードかrequireを書く必要があり、面倒でした

PHP 作成者は、クラスを参照するのが最善です。現時点でインクルードがない場合、システムが自動的にクラスを見つけて自動的に導入します~

そこで、__autoload() 関数が登場しました。

通常は、class_core.php に配置される discuz などのアプリケーション エントリ クラスに配置されます。

まず簡単な例について話しましょう:

最初の状況: ファイル A.php の内容は次のとおりです

クラスA{

パブリック関数 __construct(){

エコー「fff」;

}

}

?>

ファイル C.php の内容は次のとおりです:

function __autoload($class)
{
$file = $class .php';
if (is_file($file)) {
require_once($file)
}
$ a = new A(); //__autoload がここで自動的に呼び出され、A.php ファイルが導入されます

?>

2 番目のケース:

オートロードをカスタマイズして、ローダーにわかりやすい名前を付けたい場合があるため、C.php を次のように変更する必要があります: 関数ローダー($class)

{
$file = $class . '.php';
if (is_file($file)) {
require_once($file);
}
}

spl_autoload_register('loader'); //元の __autoload

を上書きして、自動読み込みメソッドを登録します。

$a = 新しい A();

?>

3 番目の状況

: より高度になり、クラスを使用して自動読み込みを管理したいと考えています クラスローダー

{
パブリック静的関数loadClass($class)
{
$file = $class .php';
if (is_file($file)) {
require_once($file);
}
}
}

spl_autoload_register(array('Loader', 'loadClass'));

$a = new A();

?>

現時点でのベストフォーム。

通常は、エントリースクリプトにspl_autoload_register(*)を入れます。つまり、最初から引用します。たとえば、次のようなディスカスアプローチがあります。

if(function_exist('spl_autoload_register')){

spl_autoload_register(array('core','autoload')); //php5以降で登録関数がある場合は自動ロード関数として書いたコアクラスに登録します

}その他{

function __autoload($class){ //そうでない場合は、PHP ネイティブ関数 __autoload 関数を書き換えて、独自のコア関数を呼び出すようにします。

return core::autoload($class);

}

}

この段落をエントリーファイルの先頭に置くのは素晴らしいことです~

転載: http://www.cnblogs.com/zhongyuan/p/3583201.html

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