2009-09-10 23 views
6

:PHP 5ではPHPでオートローディングを使用するのは悪いですか? <a href="http://php.net/manual/en/language.oop5.autoload.php" rel="nofollow noreferrer">php.net</a>から

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

ここで、__autoloadを使用して動的サイトに適切なクラスをロードするのは悪い習慣ですか?

私のサイトを設置している方法はindex.phpファイルにファイルを含めることで、例えばhttp://www.site.com/index.php?p=PAGE-I-WANT-TO-LOAD

私は、フォーラムのセクションまたは私のサイトのブログのセクションの午前のであれば、私は唯一の適切なクラスや関数をしたいですロードされるので、私は自動ロードを使用しますが、私は最後の手段として__autoloadを使用しなければなりませんか、または私が高トラフィックのシステムでもうまくやっているのですか?

答えて

8

悪いですか? No. __autoload()は、PHP 5のお気に入りです。アプリケーションに必要なクラスファイルを手動でインクルード/要求する必要がありません。つまり、開発者としては、「適切なクラス」だけがロードされることを保証するのはあなた次第です。これは、構造化された命名規則とディレクトリ構造で簡単に実行できます。 __autoload()を適切に使用する方法については、オンラインでたくさんの例があります.Google検索を実行すると、豊富な情報が得られます。

+1

はい、私はすでにそれを使用し、それに – JasonDavis

+2

@jasonを頼りにするパフォーマンスヒットであれば、私が求めていた:あなたは今のパフォーマンスについては何も言及していないので、あなたはおそらく、あなたの質問にそれを明確にする必要があります。 –

+0

@musicfreakあなたは正しいですが、パフォーマンスが良くない場合は、「悪い練習」と思われる可能性が最も高いでしょう – JasonDavis

8

オートロードは、必要なクラスだけをロードするのに適しています。

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

+1

参照されているspl_autoload_register()ページを見ましたが、実際には理解できません。基本的な__autoload関数は何ですか? – JasonDavis

+1

複数のオートローダーを使用する場合は、spl_autoload_registerを使用する必要があります。そうでない場合は、__autoloadはうまく動作します。 –

+0

spl_autoload_register()の主なセールスポイントは、__ autoload()が2回定義されているため、ランタイムエラーが発生することなく、クラスライブラリが独自のオートロード関数を定義できることです。 – gnud

3

__autoload()の唯一の危険は、貧弱なオートロード機能を定義する場合です。一般に、パフォーマンスヒットの観点から見ると、PHPがクラスを含む正しいファイルを探すため、いくつかのディスクシークがあります。すべての厄介なinclude()呼び出しを取り除くことが、逆さまです。

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

+0

はい私はAPCを使用しています。本当に心配しているわけではありません。オートローダーを使用し続けることを望まないのは、ファイルをロードするか、バックアップとして使用することが悪い場合です。インフォメーションのため – JasonDavis

4

ここで、__autoloadを使用して動的サイトで適切なクラスをロードするのは悪い習慣ですか?

全くありません。オートロードに頼ることができます。いい命名規則を考案し、効率的なオートローダーを実装するだけです。

考慮すべき大きな問題が1つあります。 Zend Guardは物事の名前を変更する傾向があるため、オートロードとZend Guardはうまくいっていません。そのため、使用することを決めた命名規則はほとんど同じではありません。 Zend Guard(またはその他の難読化ツール)を使用する場合は、すべてのファイルを手作業で含める必要があります。ディスク上のファイル名は は、難読化されたクラス名と一致しないため

オートローディングクラスは動作しません

:ここ

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

+0

私は現在すでにautoloadを使っていますが、これは私が使っていないZend Guardとうまくやっていない点についての良い点ですが、 – JasonDavis

関連する問題

 関連する問題