php の namespace + useってC系の namespace+using と違うよねって話があって…
意識したことなかったけど確かにそうだなーと思っていろいろわかりやすそうな資料を探ったんだけども…
見つからないので自分なりにまとめてみた。
php use ≒ java import
パッケージ(名前空間で分離された) クラス等の処理をまとめる
故
利用(use/import)するときには、区切られた空間の中のパッケージ(クラス)を利用する意思を指定する必要がある
namespace HOGEHOGE {
class A {
//... 処理
public function hoge() { ... }
}
class B {
// ... 処理
public function hoge() { ... }
}
}
use HOGEHOGE\A; // HOGEHOGEスペース(パッケージ)の中のAクラスを使うよ!
A::hoge(); // use宣言されてるので利用可
B::hoge(); // use宣言されていないので利用不可. この場合グローバルに定義されているBが呼ばれることになるのでNotFound.
C系
名前空間は空間
として認知される
故
using 宣言された空間に定義されているクラスは利用可(空間内を走査して参照解決される)
namespace HOGEHOGE {
class A {
//... 処理
public function hoge() { ... }
}
class B {
//... 処理
public function hoge() { ... }
}
}
using HOGEHOGE; // HOGEHOGEnamespaceを使うよ
A::hoge(); // HOGEHOGE namespace内にあるAクラス。読み込み可
B::hoge(); // HOGEHOGE namespace内にあるBクラス。読み込み可
もっとわかりやすくするためにいろんなリファレンスを参照してみようと思う