namespace
有作用的类型 类、函数、常量
关键字namespace必须在所有代码之前 除用于编码的declare语句
namespace Myproject; const A = 1; class connection{ } funciton connect(){}
namespace 同一个空间名可以用于多个php文件中 即允许将一个空间的内容分割到不同的文件中。
与文件目录类似 命名空间可以使用分层级
namespace Myproject\Level;
在同一个文件中,定义多个命名空间。有两种方法:
1.
namespace Myproject; ... ... namespace Labproject; ... ...
2.大括号
namespace Myproject{ ... } namespace Labproject{ ... }
但是我们不提倡在一个文件中定义多个命名空间。
将全局的非命名空间中的代码与命名空间中的代码组合在一起,只能使用大括号形式的语法。全局代码必须用一个不带名称的 namespace 语句加上大括号括起来,例如:
<?php namespace MyProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace { // global code session_start(); $a = MyProject\connect(); echo MyProject\Connection::start(); } ?>
除了开始的declare语句外,命名空间的括号外不得有任何PHP代码。
<?php declare(encoding='UTF-8'); namespace MyProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace { // 全局代码 session_start(); $a = MyProject\connect(); echo MyProject\Connection::start(); } ?>
关于命名空间中 类、函数、常量的使用
1. 非限定名称,或不包含前缀的类名称,例如 $a=new foo(); 或 foo::staticmethod();。如果当前命名空间是 currentnamespace,foo 将被解析为 currentnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,则 foo 会被解析为foo。
2. 限定名称,或包含前缀的名称,例如 $a = new subnamespace\foo(); 或 subnamespace\foo::staticmethod();。如果当前的命名空间是 currentnamespace,则 foo 会被解析为 currentnamespace\subnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,foo 会被解析为subnamespace\foo。
3. 完全限定名称,或包含了全局前缀操作符的名称,例如, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();。在这种情况下,foo 总是被解析为代码中的文字名(literal name)currentnamespace\foo。