ホームページ >バックエンド開発 >PHPチュートリアル >php_PHP チュートリアルの __autoload() メソッドの詳細な説明

php_PHP チュートリアルの __autoload() メソッドの詳細な説明

WBOY
WBOYオリジナル
2016-07-20 11:10:30797ブラウズ

マジック関数 __autoload() メソッドが PHP に登場する前は、プログラム ファイル内で 100 個のオブジェクトをインスタンス化する場合、include または require を使用して 100 個のクラス ファイルをインクルードするか、これらの 100 個のクラスを同じプログラム ファイル内で定義する必要がありました。クラス ファイル - このファイルは非常に大きくなると思います。

しかし、__autoload() メソッドが登場したので、今後はこのクラスがオブジェクトをインスタンス化する前に指定されたファイルを自動的にロードするようになります。

例を通して具体的な使い方を見ていき、PHPのマジック関数__autoloadを使う際の注意点については後ほど説明します。

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

//クラスClassAを定義し、ファイル名はClassA.php
class ClassA{
public function __construct(){
echo "ClassA load success !";
}
}

//クラス ClassB を定義、ファイル名は ClassB.php、ClassB は ClassA を継承
class ClassB は ClassA を拡張 {
public function __construct(){
//parent::__construct();
echo "ClassB load success !";
}
}

テスト用に 2 つのクラスを定義した後、次のように __autoload() メソッドを含む PHP 実行プログラム ファイルを作成します。

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

function __autoload($classname){
$classpath="./".$classname.'.php';
if(file_exists($classpath)){
require_once($classpath) ;
}
else{
echo 'class file'.$classpath.'not found!';
}
}

$newobj = new ClassA();
$newobj = new ClassB();

このファイルの操作には問題があります。なし。これは、autoload がいかに使いやすいかを示しています (笑)...
しかし、いくつかの側面に注意を払う必要があることを思い出してください。

1. クラスに継承関係があり (例: ClassB が ClassA を拡張する)、ClassA が ClassB が存在するディレクトリにない場合
__autoload マジック関数を使用して ClassB をインスタンス化すると、致命的なエラーが発生します。

コードは次のとおりです コードをコピー
致命的なエラー: クラス 'Classd' が ...ClassB.php の 2 行目で見つかりません

解決策: extends 関係を持つすべてのクラスをクラスを継承するときは、継承したクラスをファイルに手動で含めます。

2. もう 1 つの注意点は、マジック関数 __autoload が実行できるように、クラス名とクラス ファイル名が一致している必要があることです。

その他の注意事項:
3. CLI モードで PHP スクリプトを実行する場合、このメソッドは無効です。例: .././ のようなファイル名は非常に危険です。


http://www.bkjia.com/PHPjc/444710.html

本当http://www.bkjia.com/PHPjc/444710.html技術記事マジック関数 __autoload() メソッドが PHP に登場する前は、プログラム ファイル内で 100 個のオブジェクトをインスタンス化したい場合は、include または require を使用して 100 個のクラス ファイルをインクルードする必要がありました。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。