これは、OO デザインの基本的な考え方の 1 つでもあります。 PHP5 より前では、クラスを使用する必要がある場合、include/require を使用してクラスを直接インクルードするだけで済みました。実際の例を次に示します。
コードをコピーします コードは次のとおりです:
class ClassA{
public function __construct(){
echo "ClassA load success!"
}
}
//Defineクラス ClassA、ファイル名は ClassA.php
class ClassA{
public function __construct(){
echo “ClassA ロード成功!”
}
}
class ClassB extends ClassA {
public function __construct(){
/ /parent: :__construct();
echo “ClassB ロード成功!”;
}
}
//クラス ClassB を定義、ファイル名は ClassB.php、ClassB は ClassA を継承します
class ClassB extends ClassA {
public function __construct (){
//parent::__construct();
echo “ClassB load success!”;
}
}
テスト用の 2 つのクラスを定義した後、次のように __autoload() メソッドを含む PHP 実行プログラム ファイルを作成します。
関数 __autoload($classname){
$classpath=”./”.$classname.'.php';
if(file_exists($classpath)){
require_once($classpath)
}
else{
echo '; class file'.$classpath.'not found!';
}
}
$newobj = new ClassA();
このファイルを実行してもまったく問題ありません。 Autoload がとても使いやすいことがわかります (笑)...
しかし、いくつかの側面に注意を払う必要があることを思い出してください。
1. クラスに継承関係があり (例: ClassB が ClassA を拡張する)、ClassB が存在するディレクトリに ClassA が存在しない場合、
__autoload マジック関数を使用して ClassB をインスタンス化すると、致命的なエラーが発生します:
致命的なエラー: クラス 'Classd' が...ClassB.php の 2 行目に見つかりません。
解決策: extends 関係を持つすべてのクラスを同じファイル ディレクトリに配置するか、継承されたクラスをインスタンス化するときに継承されたクラスをファイルに手動で含めます。
2、もう 1 つの注意点は、マジック関数 __autoload をより便利に使用できるように、クラス名とクラスのファイル名が一致している必要があることです。
その他の注意事項:
3. このメソッドは実行中は無効です。 CLI モードの PHP スクリプト
4. クラス名がユーザー入力に関連している場合、またはユーザー入力に依存している場合は、必ず入力ファイル名を確認してください。たとえば、 .././ このようなファイル名は非常に危険です。
http://www.bkjia.com/PHPjc/325044.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/325044.html技術記事これは、OO デザインの基本的な考え方の 1 つでもあります。 PHP5 より前では、クラスを使用する必要がある場合、include/require を使用してクラスを直接インクルードするだけで済みました。実際の例を次に示します: ...