PHPのグローバル空間において
useキーワードを用いた際のインポートについて質問です。
----------------------------------------------------------------------------------------------------------
sample.php
<?php
//グローバル空間
namespace{
use SAMPLE;//はインポートできない。 use ¥SAMPLEはインポートできる。
print "名前空間のインポート";
print PHP_EOL;
$hoge = new SAMPLE\TestClass();
}
//任意の名前空間
namespace SAMPLE{
class TestClass{
public function __construct (){
print __NAMESPACE__;
}
}
}
----------------------------------------------------------------------------------------------------------
とあった場合、グローバル空間内でuseキーワードを用いる場合
use ¥SAMPLE;
だとインポートができて
use SAMPLE:
だとインポートできない理由(というか仕様)が理解できません。
具体的には
PHP Warning: The use statement with non-compound name 'SAMPLE' has no effect in
という警告がでます。
上記の例の場合たとえ
use ¥SAMPLEでインポートしても
実際にクラスを使用する場合は
new SAMPLE¥TestClass();
と修飾名でコールしなければならないので
コードを書く労力としてはあまり意味がないのですが。。。。。
どなたか
グローバル空間内で上記の様に
use ¥SAMPLEだとインポートできるのに
use SAMPLEだとインポートできない理由(仕様)、このように理解すればよいという理由を
ご教授ください。よろしくお願いします。
No.1ベストアンサー
- 回答日時:
インポートはできてます。
でているのは警告で、no effectと書いてありますので、効果が無い、ということです。
「¥」のないものは非修飾名というものになり、確かに、SAMPLEという名前空間をuseしても、エイリアスを貼る効果はありません。
namespace SAMPLE\Foo{
class Example{
public functoin test(){
echo "test";
}
}
}
と合った場合に、
use SAMPLE\Foo;
$obj = new Foo\Example();
とするとエラーは出てこないと思います。SAMPLEの部分を記述しなくても呼び出せるのでエイリアスを貼る意味はあったと。
で、
use \SAMPLEとした時に警告が出てこない理由は、完全修飾名だからです。
http://www.php.net/manual/ja/language.namespaces …
こちらを見ていただくと、
「¥」で区切られていない記述は、非修飾名であり、「¥」を含まれている記述は修飾名となりますが、
先頭に「¥」がある場合は、ソレが先頭以外で非修飾名でも修飾名でも「完全修飾名」とみなされます。
その為、useで警告がでないということになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- 英語 L-PRF can be obtained by manual or automated metho 1 2022/04/08 09:39
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Windows 10 bash の -z オプションがうまく動作しない原因を教えて下さい。 4 2023/03/22 18:04
- UNIX・Linux bashの変数でブランクがあるかチェックする方法教えて下さい。 3 2023/04/06 16:09
- TOEFL・TOEIC・英語検定 英語 文法 1 2023/02/27 14:01
- 英語 The Piezosurgery® technique has seen widespread us 1 2023/03/05 12:48
- Access(アクセス) Access2016のExcelインポートの機能のことで教えてください 1 2022/09/11 14:58
- 英語 The Piezosurgery® technique has seen widespread us 1 2023/03/08 12:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPでの画像の形式の変換
-
VBA コレクションに2次元配列...
-
可変変数にアロー演算子を使いたい
-
次のhtml・cssでspan内の文字を...
-
Smarty変数の値をJavascript変...
-
PHP、ヒアドキュメント内でのIF...
-
Dosブロンプトでtabを出力したい
-
switch()文で値の大小比較
-
DTOとEntityの差は何ですか。
-
shシェルスクリプト 空白行の...
-
Excel VBA:特定の文字列以降(...
-
IEを使わないでhtmlテキストを...
-
wordの差し込み印刷で文字...
-
PDOを使った総レコード数(行数...
-
ローカルのコンピュータ名を取...
-
WordでExcelデータを差込...
-
小数点以下0の非表示
-
php 入力画面から確認表示画面...
-
ミュージックのアートワークを...
-
自動車教習所について 質問 普...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Let's Encryptで自動更新がされ...
-
VBA コレクションに2次元配列...
-
VB.NETからVBAマクロ(引数)を呼...
-
エラーの理由が分りません。Pri...
-
PHP、ヒアドキュメント内でのIF...
-
PHPでの画像の形式の変換
-
CSVファイルをブラウザのキャッ...
-
可変変数にアロー演算子を使いたい
-
次のhtml・cssでspan内の文字を...
-
VB.NETSystem.Xml 要素数を得る...
-
どういうプログラムを関数化を...
-
ExcelVBAで部分一致(*)をしたい
-
PHPの変数値をリンクさせたい
-
protectedなのにアクセスできな...
-
file_existsが動作しない
-
PHPプログラム上で「URLを直接...
-
ASPのResponse.WriteをPHPでは...
-
[C++]std:mapの扱いを教えて頂...
-
PHPでXMLの置換 replaceData
-
[C#]Arraylistに追加した構造体...
おすすめ情報