ホームページ  >  記事  >  バックエンド開発  >  Plants vs. Zombies モディファイアの使用方法 PHP __autoload 関数の使用方法 (クラス ファイルを自動的にロードする)

Plants vs. Zombies モディファイアの使用方法 PHP __autoload 関数の使用方法 (クラス ファイルを自動的にロードする)

WBOY
WBOYオリジナル
2016-07-29 08:47:551676ブラウズ

これは、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();

このファイルを実行しても問題ありません。オートロードを見ました。とても使いやすいです、笑...
しかし、いくつかの点に注意を払う必要があることを思い出してください。
1. クラスに継承関係があり (例: ClassB が ClassA を拡張する)、ClassB が存在するディレクトリに ClassA が存在しない場合、
__autoload マジック関数を使用して ClassB をインスタンス化すると、致命的なエラーが発生します:
致命的なエラー: クラス 'Classd' が...ClassB.php の 2 行目に見つかりません。
解決策: extends 関係を持つすべてのクラスを同じファイル ディレクトリに配置するか、継承されたクラスをインスタンス化するときに継承されたクラスをファイルに手動で含めます。
2、もう 1 つの注意点は、マジック関数 __autoload をより便利に使用できるように、クラス名とクラスのファイル名が一致している必要があることです。
その他の注意点:
3. CLI モードで PHP スクリプトを実行します。
4. クラス名がユーザー入力に関連している場合、またはユーザー入力に依存している場合は、必ず入力ファイル名を確認してください。たとえば、.././ などのファイル名は非常に重要です。危険な。
以上、Plants vs. Zombies モディファイアの使い方と PHP の __autoload 関数(クラスファイルの自動読み込み)の使い方を紹介しましたが、興味のある友人の参考になれば幸いです。 PHP チュートリアルで。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。