PHPはオブジェクトを自動的にロードします

伊谢尔伦
リリース: 2016-11-23 14:20:14
オリジナル
1206 人が閲覧しました

多くの開発者は、オブジェクト指向アプリケーションを作成するときに、クラス定義ごとに PHP ソース ファイルを作成します。大きな煩わしさは、各スクリプトの先頭にインクルード ファイルの長いリスト (クラスごとに 1 つのファイル) を記述しなければならないことです。

PHP 5 では、これは必要なくなりました。まだ定義されていないクラスを使用しようとしたときに自動的に呼び出される __autoload() 関数を定義できます。この関数を呼び出すことにより、スクリプト エンジンは、PHP がエラーで失敗する前に、必要なクラスをロードする最後のチャンスを得ることができます。

ヒント

spl_autoload_register() は、クラスの自動ロードを実装するためのより柔軟な方法を提供します。したがって、__autoload() 関数の使用は推奨されなくなり、将来のバージョンでは非推奨になる可能性があります。

注:

バージョン 5.3.0 より前では、__autoload 関数によってスローされた例外は catch ステートメント ブロックによってキャッチできず、致命的なエラーが発生します。 5.3.0 以降では、__autoload 関数によってスローされた例外は catch ステートメント ブロックによってキャッチできますが、条件に従う必要があります。カスタム例外がスローされる場合は、対応するカスタム例外クラスが存在する必要があります。 __autoload 関数は、カスタム例外クラスを再帰的に自動的にロードできます。

注:

オートロードは、PHP の CLI インタラクティブ モードでは使用できません。

例 #1 自動ロードの例

この例では、MyClass1.php ファイルと MyClass2.php ファイルからそれぞれ MyClass1 と MyClass2 をロードしようとします:

function __autoload($class_name){
require_once $class_name.'.php';
}
$obj = new MyClass1();
$obj2 = new MyClass2();
ログイン後にコピー

注: MyClass1.php と MyClass2.php は同じディレクトリにある必要があります。ロードする現在のスクリプト

別の例

この例は、インターフェイス ITest をロードしようとします:

function __autoload($name) {
   var_dump($name);
}
class Foo implements ITest {
}
/*
string(5) "ITest"
Fatal error: Interface 'ITest' not found in ...
*/
ログイン後にコピー

例 #3 PHP 5.3.0 以降で例外処理を自動的にロードします

この例は例外をスローし、 try/catch ステートメントで使用します。ブロック内のデモ。

function __autoload($name) {
   echo "Want to load $name.\n";
   throw new Exception("Unable to load $name.");
}
try {
   $obj = new NonLoadableClass();
} catch (Exception $e) {
   echo $e->getMessage(), "\n";
}
ログイン後にコピー

上記のルーチンは次の出力を行います:

NonLoadableClass をロードしたい。
NonLoadableClass をロードできない。

例 #4 PHP 5.3.0 以降での自動ロード例外処理 - カスタム例外メカニズムなし

この例では、例外が発生しました。存在しないカスタム例外ハンドラーにスローされます。

上記のルーチンは出力します:

NonLoadableClass をロードしたい。
MissingException をロードしたい。

致命的なエラー: クラス 'MissingException' が testMissingException.php の行 4 に見つかりません


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!