PHP的命名空间和“使用”
我在命名空间和use
语句方面有点麻烦。
我有三个文件: ShapeInterface.php
, Shape.php
和Circle.php
。
我正在尝试使用相对path来做到这一点,所以我把它放在所有的类中:
namespace Shape;
在我的圈子里,我有以下几点:
namespace Shape; //use Shape; //use ShapeInterface; include 'Shape.php'; include 'ShapeInterface.php'; class Circle extends Shape implements ShapeInterface{ ....
如果我使用include
语句,则不会出现错误。 如果我尝试use
我得到的声明:
致命错误:第8行/Users/shawn/Documents/work/sites/workspace/shape/Circle.php中找不到类“Shape \ Shape”
有人可以给我一些关于这个问题的指导吗?
use
运算符用于为类,接口或其他名称空间的名称提供别名。 大多数use
语句引用您想要缩短的名称空间或类:
use My\Full\Namespace;
相当于:
use My\Full\Namespace as Namespace; // Namespace\Foo is now shorthand for My\Full\Namespace\Foo
如果use
操作符与类或接口名称一起使用,则它具有以下用途:
// after this, "new DifferentName();" would instantiate a My\Full\Classname use My\Full\Classname as DifferentName; // global class - making "new ArrayObject()" and "new \ArrayObject()" equivalent use ArrayObject;
use
操作符不要与自动加载混淆。 一个类是通过注册一个自动加载器(例如使用spl_autoload_register
)自动加载(否定include
的需要)。 您可能想要阅读PSR-4来查看合适的自动加载器实现。
最简单的方法来说吧
如果您需要将代码命名到命名空间,只需使用关键字namespace
。
在file1.php namespace foo/bar;
在file2.php中$obj = new foo/bar/myObj();
还有一点,这个故事 – use
关键字。
如果你在file2中use foo/bar as mypath
这意味着你需要在文件的任何地方使用mypath
而不是foo/bar
。
$obj = new mypath/myObj();
如果你说过use foo/bar
那么就等于use foo/bar as bar