名前空間
名前空間とは、名前の衝突を防ぐためにつかわれる。
名前空間で衝突を防げるのは以下の3つ
- クラス
- 関数
- 定数
1 2 3 4 5 | namespace MyProject; const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } |
名前空間は階層化できる。
1 2 3 4 5 | namespace MyProject\Sub\Level; const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } |
1つのファイル内に複数の名前空間を使えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 | namespace MyProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace AnotherProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } |
名前空間に属さないコードはnamespace{}内に書きます。
1 2 3 4 5 6 7 8 9 10 11 12 | namespace MyProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace { // グローバルコード session_start(); $a = MyProject\connect(); echo MyProject\Connection::start(); } |
名前空間の利用例
名前空間を指定したファイルの中で、定数、関数、クラスを定義します。
1 2 3 4 5 6 7 8 | namespace Foo\Bar\subnamespace; const FOO = 1; function foo() {} class foo { static function staticmethod() {} } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | namespace Foo\Bar; include 'file1.php'; const FOO = 2; function foo() {} class foo { static function staticmethod() {} } /* 非修飾名 */ foo(); // Foo\Bar\foo 関数と解釈されます foo::staticmethod(); // Foo\Bar\foo クラスの // staticmethod メソッドと解釈されます echo FOO; // 定数 Foo\Bar \FOO と解釈されます /* 修飾名 */ subnamespace\foo(); // Foo\Bar \subnamespace\foo 関数と解釈されます subnamespace\foo::staticmethod(); // Foo\Bar\subnamespace\foo クラスの // staticmethod メソッドと解釈されます echo subnamespace\FOO; // 定数 Foo\Bar\subnamespace\FOO と解釈されます /* 完全修飾名 */ \Foo\Bar\foo(); // Foo\Bar\foo 関数と解釈されます \Foo\Bar\foo::staticmethod(); // Foo\Bar\foo クラスの // staticmethod メソッドと解釈されます echo \Foo\Bar\FOO; // 定数 Foo\Bar\FOO と解釈されます |
[…] 名前空間 […]