4

コード例 1

use Outline\Drawing;
$var = new Drawing();

コード例 2

$var = new Outline\Drawing();

質問:

サンプル 1 のコードを使用すると、PHP はハードウェアの動作を難しくしますか (より多くのファイルを検索したり、より多くの処理を実行したりしますか?) useどの行がどのクラスと一致するかを把握するコードのレベルであっても、何かが行われると確信しています。何が起こっているのか正確に知りたい。

要するに:

  • useステートメントの使用とそれが対象とするクラスとの間の関係を解決するとき、PHP は何をしますか?
  • これら 2 つのコード サンプルに関して、PSR-0/PSR-4 オートローダの動作に影響はありますか?
4

1 に答える 1

6

use ステートメントの使用とそれが想定されているクラスとの間の関係を解決するとき、PHP は何をしますか?

use ステートメントは、実際には名前空間/クラスをファイルにロードしません。その名前空間内のクラスを参照するエイリアスのリストを設定するだけです。

まだ宣言されていないクラスに遭遇すると、そのエイリアスのリストを使用して、クラス名を完全に修飾しようとします (接頭辞の置換)。クラスのエイリアスが見つからない場合は、現在のスコープの名前空間を使用してクラス名を修飾します。

クラス名が完全に修飾されている場合にのみ、その php はクラスをオートロードしようとします (定義されている可能性のあるさまざまなオートローダーを呼び出します)。

これら 2 つのコード サンプルに関して、PSR-0/PSR-4 オートローダの動作に影響はありますか?

いいえ、オートローダーはコード サンプルの違いによる影響を受けません。これは、php がまったく同じパラメーターを使用してまったく同じ方法でオートローダーを呼び出すためです。

于 2015-01-10T18:40:33.360 に答える