PHP的命名空间和“使用”

我在命名空间和use语句方面有点麻烦。

我有三个文件: ShapeInterface.phpShape.phpCircle.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