PHP名称空间和“使用". [英] PHP namespaces and "use"

查看:56
本文介绍了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语句,我会得到:

致命错误:找不到类'Shape \ Shape' /Users/shawn/Documents/work/sites/workspace/shape/Circle.php,第8行

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

解决方案

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 ,以查看合适的自动加载器实现. /p>

I am having a little trouble with namespaces and the use statements.

I have three files: ShapeInterface.php, Shape.php and Circle.php.

I am trying to do this using relative paths so I have put this in all of the classes:

namespace Shape; 

In my circle class I have the following:

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

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

class Circle extends Shape implements ShapeInterface{ ....

If I use the include statements I get no errors. If I try the use statements I get:

Fatal error: Class 'Shape\Shape' not found in /Users/shawn/Documents/work/sites/workspace/shape/Circle.php on line 8

Could someone please give me a little guidance on the issue?

解决方案

The use operator is for giving aliases to names of classes, interfaces or other namespaces. Most use statements refer to a namespace or class that you'd like to shorten:

use My\Full\Namespace;

is equivalent to:

use My\Full\Namespace as Namespace;
// Namespace\Foo is now shorthand for My\Full\Namespace\Foo

If the use operator is used with a class or interface name, it has the following uses:

// 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;

The use operator is not to be confused with autoloading. A class is autoloaded (negating the need for include) by registering an autoloader (e.g. with spl_autoload_register). You might want to read PSR-4 to see a suitable autoloader implementation.

这篇关于PHP名称空间和“使用".的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆