9

私は 1 年以上 PHP 5.3 を使用してきましたが、正しいかどうかわからないことが常にあります。現在のコンテキストの名前空間の外部でクラスを使用するときは常に、次のuseキーワードを使用します。

use Another\Class

だから私は直接書くことができるコードで:

$object = new Class();

それは問題ありませんが、多くの場合、ファイルの先頭に多くのuseディレクティブを配置することになり、これを維持するのはあまり好ましくありません (このクラスを使用しない場合、useディレクティブを削除する可能性は低いです)。

このクラスを使用するたびに、名前空間全体を記述することもできます。

$object = new \Another\Class();

だから私は2つのことを疑問に思っていました:

  • できないことのように、キーワードを使用しないことの欠点はありますかuse(毎回名前空間全体を書かなければならないという事実を除いて) ?
  • それを使用することの欠点はありますか?(何らかの形でクラスをインポートするため、パフォーマンスがわずかに低下します)?

編集 明確にするために:私は、クリーンなコードが小さなパフォーマンスの調整よりも重要であることを知っています。コンピューターがいつ動作しているかを知りたいだけです。

4

5 に答える 5

7

を使用しないことの 1 つの大きな欠点useは、毎回フルネームを入力する必要があることです。

それを使用することの 1 つの大きな欠点は、既に定義されているクラスと名前が衝突する可能性があることです。PHPがそれをどのように処理するかはわかりませんが、どちらにしても、少し余分な手間がかかります. プラスは、実際に同じ名前を使用する必要がないことです...しかし、マイナスは、ファイル名に対応しないクラスがあることです。

ただし、このパフォーマンスBSの詳細に入る前に、 おかしな名前のエイリアシングのパフォーマンスコストを気にするなら、それは間違っています. 「より速い」構文について心配する必要はありません。限目。あなた、あなたのユーザー、そしてストップウォッチを手に「リロード」を強制的にクリックしているあの男は、違いに気付かないでしょう. これまで。 最適化するよりもはるかに優れたものがあります。それは、必要なポイントに到達したことを前提としています。

于 2013-01-23T08:01:53.860 に答える
4

最初に頭に浮かぶのは、次のようなエイリアスを使用できることです。

use My\Full\Classname as Another;

ソースphp マニュアル

于 2013-01-23T08:01:33.770 に答える
1

名前空間は PHP < 5.3 と下位互換性がありません。互換性の問題が発生した場合は、 namespaceanduseステートメントのすべてのケースを削除する必要があります。

于 2013-01-23T08:03:47.743 に答える
0

私は Eclipse を PDT と共に使用し、Eclipse の完全な構文を使用して、使用または完全な名前空間の両方を使用して簡単にします。

個人的には、(クラス名のオートコンプリートを使用すると Eclipse が自動的に作成する) ほとんどの場合、"use" を使用します。これは、コードの構文をよりクリーンにするためです。

私も ClassLoader を使用しており、プロジェクトは名前空間と同じ順序でフォルダーを使用するため、クラスローダーは各クラスを直接ロードします。「インクルード」命令は必要ありません。

Eclipse が各クラス、メソッド、変数、および関連付けられた型を非常に簡単に認識できるようになるため、通常は静的コード (インスタンスなし) を使用する通常のコードであっても、常にクラス (fex 例外あり) を使用します。

したがって、私のコードはグローバル変数のない多くのファイルであり、クラスごとにモジュールが分離されているため、クラス名の衝突はまれです。そして、Eclipse で簡単に検出できるこのいくつかのケースでは、完全な構文を使用するか、省略形を使用します (手動で名前空間のエイリアスを使用するため、"namespace_alias\classname" 構文を使用します。これはよりクリーンですが、作成しません)。衝突)。

同じ構造を使用する名前空間とファイルを使用し、この方法で検索する (および include_path ディレクトリにすべてのパスを追加する) クラスローダーは、大規模なプロジェクトで非常に生産的です。

例: \Example\Name\Space\Myclass search as

各 listoffolders (プロジェクトのルート + include_path 内の "." を除くすべて) の開始フォルダー -> フォルダー (例) -> フォルダー (名前) -> フォルダー (スペース) -> ファイル (Myclass.inc または Myclass.phpまたは Myclass.php5) endfor

于 2014-06-27T06:58:43.267 に答える