現在、PHPの名前空間について調べております。
PHPマニュアルの説明で不明な点があり、教えてください。
まず、名前空間へアクセスする方法は、非修飾形式、修飾形式、完全修飾形式の3つがあり、それぞれ下記の認識でおります。
#非修飾形式
ディレクトリ構造で言うとこの同ディレクトリ内からの指定。
test.php
は下記のように記述しています。
php
1<?php 2namespace test; 3function getGreeting() { 4 return 'おはよう'; 5}
別のファイルの index.php
からは下記のように関数へアクセスします。
php
1<?php 2namespace test; 3require_once 'test.php'; 4echo getGreeting();
このように \
を含まない指定が非修飾形式です。
###修飾形式
ディレクトリ構造で言うところのドキュメント相対パス。
test.php
は下記のように記述しています。
php
1<?php 2namespace test\suzuki; 3function getGreeting() { 4 return 'こんにちは'; 5}
別のファイルの index.php
からは下記のように関数へアクセスします。
php
1<?php 2namespace test; 3require_once 'test.php'; 4echo suzuki\getGreeting();
このように途中に\
を含む指定が修飾形式です。
#完全修飾形式
ディレクトリ構造で言うところのルート相対パス。
test.php
は下記のように記述しています。
php
1<?php 2namespace test\tokyo\suzuki; 3function getGreeting() { 4 return 'こんばんは'; 5}
別のファイルの index.php
からは下記のように関数へアクセスします。
<?php namespace test; require_once 'test.php'; echo \test\tokyo\suzuki\getGreeting();
このように\
を先頭に記述した指定が完全修飾形式です。
#PHPマニュアルの説明
名前空間の使用法: エイリアス/インポートの「例1 use 演算子によるインポート/エイリアス」の説明です。
名前空間つきの名前 (完全修飾形式の名前空間は区切り文字を含んだ Foo\Bar のようなもので、グローバルな場合は区切り文字を含まない FooBar のようになります) では先頭のバックスラッシュは不要で、推奨されないことに注意しましょう。
インポートする名前は完全修飾形式でなければならず、 現在の名前空間からの相対指定で処理されることはないからです。
#質問1
上記の説明ですが、下記の解釈でよろしいでしょうか。
- useを使ってインポートするときは、必ず完全修飾形式で指定してね
- useの場合は、完全修飾形式で指定する必要があるため、先頭のバックスラッシュを付けなくても、バックスラッシュを付けたように完全修飾形式で処理するよ
- だから先頭のバックスラッシュは付けないでね
#質問2
説明では「インポートする名前は・・・」とありますが、エイリアスの場合でも同様に完全修飾形式で指定しなければならないということでよろしいでしょうか?
ということは、useを使う場合は先頭にバックスラッシュを付けることはないということでよろしいでしょうか?
ご存じの方いれば、教えてくださいm(__)m
#加筆・訂正履歴
- 2016/09/29 23:50 test.phpの追加と非修飾名、修飾名、完全修飾名の訂正
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/09/29 15:04 編集