PHP プログラミング

PHPの基本 Part 9(名前空間)(全10回)

Javaプログラマの目線でPHPの基本をまとめています。

名前空間

ファイルシステムにおけるディレクトリのように、空間を名前で区切ることにより、クラスや関数を管理しやすくするためのもの。

これがないと、あらゆるクラス名や関数名はお互いに衝突しないよう長い名前をつけて管理しなくてはならなくなるが、それは現実的ではないので、現在では普通の考え方のように思える。

名前空間を使用できるのは、バージョン5.3.0 以降。

マニュアルはこちら

名前空間を利用する方法 

  • namespace <NameSpace>
  • 中括弧{ }で区切ることができる。
    namespace <NameSpace>{   }という形
  • 名前空間の区切りはバックスラッシュ。
    namespace Shooting\Actorという形
  • 名前空間の中からグローバルな関数やクラスにアクセスするときは先頭にバックスラッシュをつける。 また、他の名前空間にアクセスする場合も、バックスラッシュから始まる完全修飾名を指定しなければならない
  • 非修飾名、修飾名(FSでいうことろの相対パス)、完全修飾名(FSでいうところの絶対パス)(バックスラッシュから始まる)。

名前空間の影響を受けるもの

クラス・関数・constで定義された定数 

名前空間の影響を受けないもの

変数・defineで定義された定数 

インポート

  • use文を用いる。
    use <名前空間>
    use <名前空間\クラス名> [as <別名(エイリアス)>]
    のように用いる。
  • 別名をつけない場合は、最後の修飾名でインポートするのと同じ
  • 関数、定数はuse文でインポートできない
  • 名前空間はネストできない
  • 非修飾名の関数、クラスの解決順序は、現在の名前空間、グローバル空間
  • インポート定義はファイル単位であり、インクルードされたファイルは、親ファイルのインポート定義を引き継がない
  • インポートは名前空間の内側か、グローバルスコープで行う。クラスのブロック内ではインポートできない

動的な名前空間の利用

変数に名前空間付きの要素(クラス、関数)を格納して、たとえば、$a = new $classtest();のようにインスタンスを生成することができる。  

マニュアルはこちら