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 ファイルが導入されます
?>
オートロードをカスタマイズして、ローダーにわかりやすい名前を付けたい場合があるため、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