PHP 名称空间和“使用”

我在名称空间和 use语句方面遇到了一点麻烦。

我有三个文件: ShapeInterface.phpShape.phpCircle.php

我尝试使用相对路径来实现这一点,所以我把它放在了所有的类中:

namespace Shape;

在我的圈子课上,我有以下几点:

namespace Shape;
//use Shape;
//use ShapeInterface;


include 'Shape.php';
include 'ShapeInterface.php';


class Circle extends Shape implements ShapeInterface{ ....

如果我使用 include语句,我不会得到错误。如果我尝试使用 use语句,我会得到:

致命错误: “形状形状”类在 /Users/shawn/Document/work/site/workspace/form/Circle.php on line 8/用户/肖恩/文档/工作/网站/工作空间/形状/Circle.php 在第8行

谁能在这个问题上给我一点指导?

230096 次浏览

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:

文件1.php

namespace foo\bar;

在 file2.php 中

$obj = new \foo\bar\myObj();

也可以使用 use

use foo\bar as mypath;

您需要在文件中的任何位置使用 mypath而不是 bar:

$obj  = new mypath\myObj();

使用 use foo\bar;等于 use foo\bar as bar;