| ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot |
FAQ: 名前空間について知っておくべきこと(PHP 5 >= 5.3.0, PHP 7) この FAQ は 2 つに別れています。一般的な質問と、 深く理解するために有用な実装に関する質問です。 まずは一般的な質問。
また、名前空間の実装を理解するために有用な実装の詳細は次のとおりです。
名前空間を使わない場合、何か注意すべきことはありますか?いいえ。これまで書いてきたコード、今後書く名前空間を含まないコードのいずれについても、 名前空間が何らかの影響を及ぼすことはありません。 お望みなら名前空間を使わないコードを書くこともできます。
例1 名前空間の外部にあるグローバルクラスへのアクセス
<?php これは、機能的に次と同等です。
例2 名前空間の外部にあるグローバルクラスへのアクセス
<?php 名前空間内での内部クラスあるいはグローバルクラスの使用法は?
例3 名前空間内からの内部クラスへのアクセス
<?php 同じ名前空間にあるクラス、関数あるいは定数を使用する方法は?
例4 名前空間内のクラス、関数あるいは定数へのアクセス
<?php \my\name や \name のような名前はどのように解決される?\ から始まる名前は常に見た目のままに解釈されます。 つまり \my\name は my\name であり、 \Exception は Exception となります。 例5 完全修飾名
<?php my\name のような名前はどのように解決される?名前にバックスラッシュを含むが先頭はバックスラッシュでない名前、たとえば my\name のような名前は 2 通りの方法で解釈されます。 別の名前に my というエイリアスを指定する import 文がある場合は、そのエイリアスが my\name の my 部分に適用されます。 それ以外の場合は、現在の名前空間が my\name の先頭に付け加えられます。
例6 修飾名
<?php 修飾されていない name のようなクラス名はどのように解決される?バックスラッシュを含まない name のようなクラス名は 2 通りの方法で解釈されます。 別の名前に name というエイリアスを指定する import 文がある場合は、そのエイリアスが適用されます。 それ以外の場合は、現在の名前空間が name の先頭に付け加えられます。
例7 非修飾クラス名
<?php 修飾されていない name のような関数名/定数名はどのように解決される?バックスラッシュを含まない name のような関数名/定数名は 2 通りの方法で解釈されます。 まず、現在の名前空間が name の先頭に付け加えられます。 現在の名前空間に name という関数あるいは定数がない場合は、 グローバル関数あるいは定数に name があればそれを使用します。
例8 非修飾関数/定数名
<?php インポートした名前が同一ファイルで定義されているクラスと衝突しない次のようなスクリプトの組み合わせは、正当なものです。 file1.php
<?php another.php
<?php file2.php
<?php MyClass クラスが名前空間 my\stuff にあるとはいえ、名前の衝突はありません。 MyClass の定義は別のファイルにあるからです。 しかし、次の例は名前の衝突による致命的なエラーとなります。 MyClass の定義が同じファイル上の use 文で行われているからです。
<?php 名前空間のネストはできないPHP では名前空間のネストはできません。
<?php
<?php PHP 5.6 より前のバージョンでは、関数や定数は use 文でインポートできないPHP 5.6 より前のバージョンでは、use 文の影響を受けるのは名前空間とクラス名のみです。 長い名前の定数や関数を短い名前にするには、それらが含まれる名前空間をインポートします。
<?php 動的な名前空間名 (クォートした名前) ではバックスラッシュのエスケープが必要バックスラッシュは文字列のエスケープ文字として使われることに注意しましょう。 文字列の中で使う際にはバックスラッシュを二重に書く必要があります。 そうしないと、予期せぬ結果を引き起こしてしまいます。 例9 ダブルクォートで囲んだ文字列内で名前空間名を扱う際の危険
<?php バックスラッシュを含む未定義な定数を参照すると、致命的なエラーが発生する未定義の定数のうち FOO のような修飾されていないものは、 PHP が FOO を定数の値と解釈したという notice が発生します。 修飾あるいは完全修飾形式の定数、つまりバックスラッシュを含む定数の場合、 それが未定義なら致命的なエラーが発生します。 例10 未定義の定数
<?php 特別な定数 NULL, TRUE, FALSE, ZEND_THREAD_SAFE そして ZEND_DEBUG_BUILD は上書きできない名前空間内で特別な組み込み定数を定義しようとすると、致命的なエラーが発生します。 例11 未定義の定数
<?php |
各種マニュアル:
PHPマニュアル |
PEARマニュアル |
Smarty(英語)マニュアル |
PHP-GTKマニュアル |
「FAQ: 名前空間について知っておくべきこと」をGoogle検索
|