6

php.netから:

PHP 5では、これは不要になりました。__autoload()まだ定義されていないクラス/インターフェースを使用しようとしている場合に自動的に呼び出される関数を定義できます。この関数を呼び出すことにより、スクリプトエンジンは、PHPがエラーで失敗する前に、クラスをロードする最後の機会を与えられます。

今私は知りたいのです__autoloadが、動的サイトに適切なクラスをロードするためだけに使用するのは悪い習慣ですか?

私のサイトの設定方法は、ファイルをファイルに含めることです。index.phpたとえば、http://www.site.com/index.php?p=PAGE-I-WANT-TO-LOADなどです。

__autoloadしたがって、自分のサイトのフォーラムセクションまたはブログセクションにいる場合は、適切なクラスと関数のみをロードする必要があるため、自動ロードを使用しますが、最後の手段として使用する場合はファイルを手動で含めることはありません。交通量の多いシステムでもうまくやっていますか?

4

4 に答える 4

9

悪い?No.__autoload()は、PHP 5への私のお気に入りの追加の1つです。これにより、アプリケーションに必要なクラスファイルを手動でインクルード/要求する必要があるという責任(および煩わしさ)がなくなります。そうは言っても、「適切なクラス」のみがロードされるようにするのは開発者の責任です。これは、構造化された命名スキームとディレクトリ構造を使用して簡単に実行できます。__autoload()を適切に使用し、Google検索を実行する方法の例はオンラインにたくさんあり、たくさんの情報を見つけることができます。

于 2009-09-10T22:27:34.373 に答える
8

自動ロードは、必要なクラスのみをロードするための良い方法です。

PHP 5> = 5.1.2では、 spl_autoload_register()のおかげで、古い__autoload()の問題のほとんどが解消されました。

于 2009-09-10T22:30:18.703 に答える
4

今知りたいのですが、動的サイトに適切なクラスをロードするために __autoload のみを使用するのは悪い習慣ですか?

全くない。オートロードに頼ることができます。必要なのは、適切な命名規則を考案し、効率的なオートローダーを実装することだけです。

考慮すべき大きな問題が 1 つあります。Zend Guard は物事の名前を変更する傾向があるため、オートローディングと Zend Guard はうまく連携しません。Zend Guard (またはその他の難読化ツール) を使用する場合は、おそらくすべてのファイルを手動で含める必要があります。

以下は、Zend Guard ユーザー ガイドからの引用です。

ディスク上のファイル名が難読化されたクラス名と一致しないため、クラスの自動ロードは機能しません。

于 2009-09-10T22:45:48.850 に答える
3

__autoload() の唯一の危険は、不十分なオートロード関数を定義した場合です。一般に、パフォーマンス ヒットに関して得られるのは、PHP がクラスを含む適切なファイルを検索する際に、数回のディスク シークだけです。include()利点は、これらの迷惑な電話をすべて取り除くことです。

このレベルでのパフォーマンスが心配な場合は、APC などのオペコード キャッシュを既に使用しているはずです。

于 2009-09-10T22:45:40.710 に答える