ホームページ >php教程 >php手册 >PHPの__autoload関数(クラスファイルを自動ロード)の使い方

PHPの__autoload関数(クラスファイルを自動ロード)の使い方

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

これは、OO デザインの基本的な考え方の 1 つでもあります。 PHP5 より前では、クラスを使用する必要がある場合、include/require を使用してクラスを直接インクルードするだけで済みました。実際の例を次に示します。

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


class ClassA{
public function __construct () {
echo “ClassA ロード成功!”;
}
}
//クラス 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 ロード成功!”
}
}
テスト用の 2 つのクラスを定義した後、次のように、__autoload() メソッドを含む PHP 実行プログラム ファイルを作成します。
function __autoload($classname){
$classpath=”./”.$classname.'.php'; (file_exists ($classpath)){
require_once($classpath);
}
echo 'class file'.$classpath.'not found!'; >}

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


このファイルを実行することはまったく問題ありません。強力な自動ロードは使いやすいです、笑...
しかし、注意しなければならない点がいくつかあることを思い出してください。
1. クラスに継承関係があり (例: ClassB が ClassA を拡張する)、ClassA が ClassB が存在するディレクトリにない場合

__autoload マジック関数を使用して ClassB をインスタンス化すると、致命的なエラー:
致命的なエラー: クラス 'Classd' が ......ClassB.php の行 2、
に見つかりません。 解決策: extends 関係を持つすべてのクラスを同じファイル ディレクトリに置くか、次の場合にファイルに手動で追加します。継承されたクラスのインスタンス化 継承されたクラスが含まれます。
2. もう 1 つの注意点は、マジック関数 __autoload を使いやすくするために、クラス名とクラス ファイル名が一致している必要があることです。
その他の注意事項: 🎜>3 . このメソッドは、PHP スクリプトを CLI モードで実行する場合は無効です。
4. クラス名がユーザー入力に関連している場合、またはユーザー入力に依存している場合は、必ず入力ファイル名を確認してください。 . /./ のようなファイル名は非常に危険です。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。