logo

名前空間について その4

ヒューマンリソシア株式会社はコラム「名前空間について その4」を公開しました。

###

今回は、より実践的なところや、「出来るけどやるには細心の注意が必要」なところなど、
いくつかより込み入った辺りに踏み込んでみましょう。

さて。色々と名前空間について見てきました。
次回、ラストは、少し「出来るけど推奨されない所」など、更にもうちょっと突っ込んだ所に踏み込んでみましょう。

まず、先に定数についてやっていきたいと思います。
名前空間を意味する __NAMESPACE__ という定数があります。実際に、動かしてみましょう。


(my.php)
namespace my {
var_dump( __NAMESPACE__ );
}

require_once(‘my.php’);
//
var_dump( __NAMESPACE__ );


結果は以下のようになるかと思います。


string(2) “my”
string(0) “”


こんな風に「現在の名前空間の名前」を、この定数で把握することが出来ます。

次に。
当然といえば当然ですが、名前空間を使うときは、名前空間の文字列を「変数の中に入れる」事もできます。


(my.php)
namespace my {
class hoge {
}
}
namespace me {
class hoge {
}
}

require_once(‘my.php’);
if (0 == mt_rand(0,1)) {
$name = ‘my';
} else {
$name = ‘me';
}
$class_name = $name . ‘\\hoge';
$obj = $class_name;
var_dump($obj);


今回は乱数を使ってちょっとばっかり遊んでますが、
考え方によっては色々と「非常に実用な」事も出来るかと思います。
変数に入れる時は、バックスラッシュ(\)をエスケープする必要がある点だけ気をつけておきましょう。

さて…今回を含めていくどか書いておりますが。
実際に実務で使う場合には「1ファイルで2つ以上の名前空間の設置」は、出来るけど非推奨になります。
非推奨にはなりますが、文法としては覚えておいても良い…のですが、
非推奨であることはしっかりと意識しておきましょう。

非推奨ついでに。
「名前空間宣言と同じ箇所にグローバルスコープなものを書きたい」場合、一応、こういう書き方ができます。

この続きは以下をご覧ください
リンク

関連情報
http://resocia.jp/
本プレスリリースは発表元企業よりご投稿いただいた情報を掲載しております。
お問い合わせにつきましては発表元企業までお願いいたします。