PHP: 名前空間
October 5, 2020
名前空間を作成する #
my\ns
という名前空間を定義する。
my_ns.php
<?php
namespace my\ns;
class MyClass {
function __toString() {
return "from MyClass";
}
}
function myFunc() {
return "from myFunc";
}
const MY_CONST = "from MY_CONST";
名前空間経由でアクセスする #
<?php
include('my_ns.php');
echo new my\ns\MyClass . "\n";
echo my\ns\myFunc() . "\n";
echo my\ns\MY_CONST . "\n";
from MyClass
from myFunc
from MY_CONST
名前空間に定義できるもの #
- class
- interface
- trait
- function
- const
use キーワード #
短い名前で利用可能となるよう、現在の名前空間へ import が可能。
<?php
include('my_ns.php');
use my\ns\MyClass;
use function my\ns\myFunc;
use const my\ns\MY_CONST;
echo new MyClass . "\n";
echo myFunc() . "\n";
echo MY_CONST . "\n";
別名で import もできる。
<?php
include('my_ns.php');
use my\ns\MyClass as MyC;
use function my\ns\myFunc as myF;
use const my\ns\MY_CONST as MY_C;
echo new MyC . "\n";
echo myF() . "\n";
echo MY_C . "\n";
Group use #
PHP 7.0+ からまとめて import 可能になった。
my_ns.php
<?php
namespace my\ns;
class MyClassA { function __toString() { return "from MyClassA"; } }
class MyClassB { function __toString() { return "from MyClassB"; } }
class MyClassC { function __toString() { return "from MyClassC"; } }
function myFuncA() { return "from myFuncA"; }
function myFuncB() { return "from myFuncB"; }
function myFuncC() { return "from myFuncC"; }
const MY_CONST_A = "from MY_CONST_A";
const MY_CONST_B = "from MY_CONST_B";
const MY_CONST_C = "from MY_CONST_C";
<?php
include('my_ns.php');
use my\ns\{MyClassA, MyClassB, MyClassC as MyCC};
use function my\ns\{myFuncA, myFuncB, myFuncC as myFC};
use const my\ns\{MY_CONST_A, MY_CONST_B, MY_CONST_C as MY_C_C};
echo new MyClassA . "\n";
echo new MyClassB . "\n";
echo new MyCC . "\n";
echo myFuncA() . "\n";
echo myFuncB() . "\n";
echo myFC() . "\n";
echo MY_CONST_A . "\n";
echo MY_CONST_B . "\n";
echo MY_C_C . "\n";
from MyClassA
from MyClassB
from MyClassC
from myFuncA
from myFuncB
from myFuncC
from MY_CONST_A
from MY_CONST_B
from MY_CONST_C
名前空間のアクセス方法と名前解決のルール #
- Unqualified name (e.g.
Foo
)Foo
が import されていたらそれ- import されていなかったら現在の名前空間から解決される
- Qualified name (e.g.
Foo\Bar
)Foo
が import されていたらその名前空間から解決される- import されていなかったら現在の名前空間から解決される
- Fully qualified name (e.g.
\Foo\Bar
)- 現在の名前空間に係わらず TOP レベル名前空間から解決される
- Relative name (e.g.
namespace\Foo\Bar
)- 現在の名前空間から解決される