回到笔记索引
类(包括抽象类和 traits)、接口、函数和常量 收到到命名空间影响,
namespace
必须在其它所有代码之前(包括 HTML、除了 declare
)声明命名空间:
1 2 3 4 5 6 7 8 9
| <?php namespace MyProject;
const CONNECT_OK = 1; class Connection { } function connect() { }
?>
|
namespace MyProject\Sub\Level
定义了子命名空间。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?php 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
| foo();
subnamespace\foo();
\Foo\Bar\foo();
|
-
访问任意全局类、函数或常量,都可以使用完全限定名称
-
动态访问时必须使用使用完全限定名称,前导反斜杠不必要
-
如果当前命名空间中不存在该函数或常量,PHP 会退而使用全局空间中的函数或常量
具体使用
1 2 3 4 5 6
| use My\Full\Classname as Another, My\Full\NSname;
use function My\Full\functionName; use function My\Full\functionName as func; use const My\Full\CONSTANT;
|
可以引入命名空间并给予别名,必须为完全限定,前导不推荐