PHP 引用命名空间中的类或函数
示例
如声明命名空间中所示,我们可以在命名空间中定义一个类,如下所示:
namespace MyProject\Shapes; class Rectangle { ... }
要引用该类,需要使用完整路径(包括名称空间):
$rectangle = new MyProject\Shapes\Rectangle();
可以通过use-statement导入类来缩短此时间:
//矩形成为MyProject\Shapes\Rectangle的别名 use MyProject\Shapes\Rectangle; $rectangle = new Rectangle();
对于PHP7.0,您可以use使用方括号将各种-statement组合在一个语句中:
use MyProject\Shapes\{ Rectangle, //与`useMyProject\Shapes\Rectangle`相同 Circle, //与`useMyProject\Shapes\Circle`相同 Triangle, //与`useMyProject\Shapes\Triangle'相同 Polygon\FiveSides, //您也可以导入子命名空间 Polygon\SixSides //在分组的“使用”陈述中 }; $rectangle = new Rectangle();
有时两个类具有相同的名称。如果它们位于不同的命名空间中,这不是问题,但是当尝试使用use-statement导入它们时可能会成为问题:
use MyProject\Shapes\Oval; use MyProject\Languages\Oval; //显然椭圆形也是一种语言! //错误!
这可以通过使用as关键字自己为别名定义名称来解决:
use MyProject\Shapes\Oval as OvalShape; use MyProject\Languages\Oval as OvalLanguage;
要引用当前名称空间之外的类,必须使用进行转义\,否则从当前名称空间采用相对名称空间路径:
namespace MyProject\Shapes; //引用MyProject\Shapes\Rectangle。正确! $a = new Rectangle(); //引用MyProject\Shapes\Rectangle。正确,但不需要! $a = new \MyProject\Shapes\Rectangle(); //引用MyProject\Shapes\MyProject\Shapes\Rectangle。不对! $a = new MyProject\Shapes\Rectangle(); //从名称空间中引用StdClass需要一个\前缀 //因为它不是在名称空间中定义的,所以它是全局的。 //引用StdClass。正确! $a = new \StdClass(); //引用MyProject\Shapes\StdClass。不对! $a = new StdClass();