PHP 命名空间和“使用”

2022-08-30 07:02:56

我在命名空间和语句方面遇到了一点麻烦。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{ ....

如果我使用这些语句,我不会得到任何错误。如果我尝试语句,我会得到:includeuse

致命错误:类“形状\形状”在第 8 行的 /Users/shawn/Documents/work/sites/workspace/shape/Circle.php 中找到

有人可以在这个问题上给我一点指导吗?


答案 1

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;

不要将操作员与自动加载混淆。通过注册自动加载程序(例如,使用 )自动加载类(不需要 )。您可能希望阅读 PSR-4 以查看合适的自动加载机实现。useincludespl_autoload_register


答案 2

如果您需要将代码排序到命名空间中,只需使用关键字:namespace

文件1.php

namespace foo\bar;

在文件 2 中.php

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

您也可以使用 .如果在 file2 中,您把use

use foo\bar as mypath;

您需要使用而不是文件中的任意位置:mypathbar

$obj  = new mypath\myObj();

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


推荐