2013-03-15 9 views
5

私はPHP 4以降私のコードライブラリの構築を開始しました。私はrequire_onceを使ってクラスをインポートしました。 PHP 5.3では、名前空間を定義してそれらをインポートすることができました。名前空間のインポートとPHPのファイルの組み合せ

require_onceの代わりにインポート(use文)を使用するようにソースファイルを変更したいと思います。これは正しい決断ですか、わかりません。

私はそれが簡単だろうと思います。クラスファイルの先頭に名前空間を定義し、検索を実行すると、&はそれらを使用する他のファイルに置き換えられます(require_onceuseに置き換えます)。実際に何がうまくいかないでしょうか?

パフォーマンスの向上はありますか?ファイルをインクルードすると、PHPがそのファイルをどのように見つけ出すのかが明白です。しかし、名前空間をインポートするとそれほど明白ではありません。名前空間を検索してPHPでインデックスを作成すると、パフォーマンスが低下しますか?

答えて

16

userequire_onceは全く異なるものです。 useはファイルをまったくインポートしていません。 useはあなたの人生を楽にしています。代わりにFull\Path\To\Classを毎回書くのは、あなたはまだ右のファイルをインクルードする責任があり

use Full\Path\To\Class 

$bar = new Class(); 

を行うことができます。

すべてのファイルを手作業で読み込む代わりに、PHP auto class loadingに頼ることができます。

ComposerまたはSymfony 2またはZend2のようなフレームワークを使用して、すべての自動読み込み処理を処理できます。

include_onceの代わりにオートロードとuseステートメントを使用するように既存のコードを移行すると、非常に時間がかかることがあります。検索と置換ソリューションはほとんどありません。

+0

ありがとうございました、私は自動クラスの読み込みに気付かなかった。しかし、それは通訳の言語でしか実装できない悪い習慣のように聞こえる。これは、クラス全体のパスを検索するようなオーバーヘッドを追加し、どのファイルが何を使用しているかわからない不適切なドキュメントにつながります。 – bkilinc

+0

自動クラスロードのため、パフォーマンス上の問題はありませんでした。上記のツールを使用すると、ルックアップが高速であることを確認するために多くの作業が行われることがわかります。結局のところ、Javaはこれを10年以上にわたって成功させています。最後に重要なことですが、インクルード/クラスローディングの単純なルールに依拠すれば、コードが大幅に単純化されます。 – BetaRide

+0

@bkilinc:PSR-0のような標準では、アプリケーション全体のオートローディングに一貫性のあるルールを使用できます。ライブラリ全体で同じ標準が適用される場合は、アプリケーション全体に対して1つのオートローダーを使用できます。これにより、パフォーマンスのオーバーヘッドを最小限に抑えながら、依存関係を気にせずに非常にモジュラーなOOPコードを書くことができます。 –

関連する問題