SitePoint: New Articles, Fresh Thinking for Web Developers and Designers |
Craig Buckler氏のHow to Use PHP Namespaces, Part 1: The Basicsに引き続き、PHP 5.3で導入された名前空間に関する解説をおこなうシリーズの第2段がSitePointにおいてHow to Use PHP Namespaces, Part 2: Importing, Aliases, and Name Resolutionのタイトルのもと公開された。実際のコーディングサンプルを交えて、実際にどのように名前解決がおこなわれるかが説明されている。
Craig Buckler氏はまず次の3つの言葉を説明。
- 完全修飾名: 「\」からはじまる完全参照。名前空間の指定がなくグローバルスペースに所属している場合には「\A」のように「\」のあとに直接名前を記載する。参照の曖昧さがまったくなくなるという利点はあるが、記述が長くなり大量に記述する場合には実用的とはいいがたい
- 修飾名: 少なくとも一つ以上の名前空間がセパレータで区切られて指定された参照名
- 非修飾名: セパレータも名前空間の指定も一切入っていない参照名
次にnamespace、use、use asオペレータを使った場合の参照例を紹介している。概要をまとめると次のとおり。
- 名前空間を定義してある場合、非修飾名はまず同じ名前空間にあるものが参照対象となる
- useオペレータで名前空間をインポートした場合、非修飾名では参照できない
- useオペレータで名前空間をインポートした場合、修飾名で参照できる
- 「use 名前空間 as エイリアス;」の指定で、「名前空間\名前」ではなく「エイリアス\名前」で参照できる
さらにそれぞれの参照規則が紹介されている。概要をまとめると次のとおり。
- 完全修飾名はコンパイル時に名前解決される
- 修飾名は所属している名前空間にあるものとして処理される
- 修飾名のエイリアスは展開される
- 修飾名は実行時に名前解決される
- 非修飾名のエイリアスは展開される
- 非修飾名は実行時に名前解決される。同名前空間を検索して、それで見つからなければグローバルスペースを検索する
Craig Buckler氏は引き続きPHP 5.3の名前空間に関する記事を公開するとしており、次の記事では、オートローディングとそのほかのいくつかのオプションを取り上げるとしている。