名前空間について その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/column/3022/
ソーシャルもやってます!