当前位置: 首页 > 编程笔记 >

PHP 引用命名空间中的类或函数

云景焕
2023-03-14
本文向大家介绍PHP 引用命名空间中的类或函数,包括了PHP 引用命名空间中的类或函数的使用技巧和注意事项,需要的朋友参考一下

示例

如声明命名空间中所示,我们可以在命名空间中定义一个类,如下所示:

namespace MyProject\Shapes;

class Rectangle { ... }

要引用该类,需要使用完整路径(包括名称空间):

$rectangle = new MyProject\Shapes\Rectangle();

可以通过use-statement导入类来缩短此时间:

// 矩形成为MyProject \ Shapes \ Rectangle的别名
use MyProject\Shapes\Rectangle;

$rectangle = new Rectangle();

对于PHP 7.0,您可以use使用方括号将各种-statement组合在一个语句中:

use MyProject\Shapes\{
    Rectangle,         //与`use MyProject \ Shapes \ Rectangle`相同
    Circle,            //与`use MyProject \ Shapes \ Circle`相同
    Triangle,          //与`use MyProject \ Shapes \ Triangle'相同
    
    Polygon\FiveSides, //您也可以导入子命名空间
    Polygon\SixSides   //在分组的“使用”陈述中
};

$rectangle = new Rectangle();

有时两个类具有相同的名称。如果它们位于不同的命名空间中,这不是问题,但是当尝试使用use-statement导入它们时可能会成为问题:

use MyProject\Shapes\Oval;
use MyProject\Languages\Oval; // 显然椭圆形也是一种语言!
// 错误!

这可以通过使用as关键字自己为别名定义名称来解决:

use MyProject\Shapes\Oval as OvalShape;
use MyProject\Languages\Oval as OvalLanguage;

要引用当前名称空间之外的类,必须使用进行转义\,否则从当前名称空间采用相对名称空间路径:

namespace MyProject\Shapes;

//引用MyProject \ Shapes \ Rectangle。正确!
$a = new Rectangle();

//引用MyProject \ Shapes \ Rectangle。正确,但不需要!
$a = new \MyProject\Shapes\Rectangle(); 

//引用MyProject \ Shapes \ MyProject \ Shapes \ Rectangle。不对!
$a = new MyProject\Shapes\Rectangle(); 


// 从名称空间中引用StdClass需要一个\前缀
// 因为它不是在名称空间中定义的,所以它是全局的。

//引用StdClass。正确!
$a = new \StdClass(); 

//引用MyProject \ Shapes \ StdClass。不对!
$a = new StdClass();
           

 类似资料:
  • 主要内容:定义命名空间,子命名空间,命名空间使用,命名空间和动态语言特征,namespace关键字和__NAMESPACE__常量,使用命名空间:别名/导入,使用命名空间:后备全局函数/常量,全局空间,命名空间的顺序PHP 命名空间(namespace)是在 PHP 5.3 中加入的,目的是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误。 PHP 命名空间可以解决以下两类问题: 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。

  • 为什么using指令在包含在匿名命名空间中时表现得好像出现在全局范围?

  • 构建MVC3解决方案进展顺利,但在浏览器中出现错误: 编译器错误消息:CS0234:命名空间“系统”中不存在类型或命名空间名称“Html”。网状物Mvc'(是否缺少部件引用?) 我已经用为解决方案安装了数据包,并为所有项目进行了设置。MVC3是否包含库System.网页。mvc.Ajax,等?为什么我得到了错误? 在References文件夹中,我有一个系统。网状物Mvc , 网状物配置 MSDN

  • 上面的代码给了我以下错误: 错误CS0234:命名空间“System.Runtime.InteropServices”中不存在类型或命名空间名称“CustomMarshalers”(是否缺少程序集引用?)

  • 问题内容: 我正在研究nodejs / socket.io的实时聊天,并且需要一些有关实施会议室的建议。 使用名称空间或使用房间功能来完全隔离颤抖的对方,哪个更好? 房间和名称空间之间真正的技术区别是什么? 资源使用方面有区别吗? 问题答案: 这是名称空间和房间 的共同点 (socket.io v0.9.8-请注意,v1.0涉及完整的重写,因此情况可能有所更改): 命名空间(io.of(’/ ns

  • 问题内容: CodeIgniter是否支持命名空间? 问题答案: 命名空间受php支持,而不受框架支持(在您的情况下为codeigniter)。如果您使用命名空间,则php版本必须> = 5.3.0。Codeigniter不能使用命名空间,因为它是为支持php 4而编写的。