変数、関数、クラスに名前を付けるのは難しい場合があります。変数のわかりやすい名前を考慮する必要があるだけでなく、その名前が他の場所で使用されていないかどうかも考慮する必要があります。コードの再利用を検討する場合、一般的に、再利用可能なコードは常に関数またはクラスに含まれており、発生する可能性のある多くの名前の競合に対処する必要があります。ただし、関数とクラスの間でも名前の競合が発生する可能性があります。これを回避するには、すべてのクラスに接頭辞を付けるか、
Namespace キーワードを使用してコードのブロックを指定します。コード ブロックの場合、スクリプトは、operator:: の後に名前空間の名前を付けてこのコード ブロックを参照する必要があります。名前空間内のコードは名前空間を宣言する必要がなく、これがデフォルトです。この方法は、プレフィックスを追加するよりも優れています。コードはよりコンパクトで読みやすくなります。
階層型 (ネストされた) 名前空間を作成できるかどうか疑問に思うかもしれませんが、答えは「いいえ」です。名前空間名の後にコロンを追加すると、名前にコロンが含まれていない変数、関数、クラスを再度呼び出すことができます。コロンは、最初の文字と最後の文字、またはその後に別のコロンが続くものでない限り、名前空間で使用できます。名前空間名のコロンは PHP にとって意味がありませんが、論理ブロックを区別するために使用すると、コード内の親子関係を示す良い方法になります。
/* 注: 次のように使用できます:
namespace Animal:dog {}
namespace anime:pig {}
コロンを使用する 親子関係を指定します。
*/
名前空間ステートメント内には関数、クラス、または定数定義以外のものを含めることはできません。これにより、グローバル変数を使用する関数ライブラリを改善するためにそれらを使用することができなくなります。
例 6.17 は、名前空間の使用方法を示しています。
リスト 6.17 名前空間の使用
namespace core_php:utility
{
class textEngine
{
public function uppercase($text) file://uppercase
{
return(strtoupper( $text));
}
}
//非 OO インターフェイスの作成 非 OO インターフェイスの作成
function uppercase($text)
{
$e = new textEngine;
return($e->uppercase($text));
}
}
//名前空間のクラスをテストします。
$e = new core_php:utility::textEngine;
print($e->uppercase("from object") . "
");
//テスト関数in namespace 名前空間内の関数をテストします。
print(core_php:utility::uppercase("from function") . "
");
//クラスをグローバル名前空間にインポートします。グローバル名前空間
import class textEngine from core_php:utility;
$e2 = new textEngine;
?> Import ステートメントは、名前空間の特定の部分をグローバル名前空間にインポートします。単一の名前空間の場合、型を定数、関数、またはクラスとして指定し、メンバーの名前を記述することができます。
// たとえば、特定の名前空間のすべてのメンバーをインポートする場合は、クラス XXX をインポートします。名前を置き換えるには * を使用できます。
//たとえば、import constant * はすべての定数をインポートします
すべての型のすべてのメンバーをインポートしたい場合は、
//For を使用します。例: import *
メンバーの後に、from キーワードと名前空間の名前を使用します。
//たとえば、import class textEngine from core_php:utility;
つまり、次のようになります。例 6.17 のように、 import * from myNamespace または import class textEngine from A ステートメント (core_php:utility など) のようなものを記述する必要があります。