ログイン



名前空間

名前空間とは、名前の衝突を防ぐためにつかわれる。

名前空間で衝突を防げるのは以下の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 と解釈されます

One Response to “名前空間”

Leave a Reply