当前位置: 首页 > 面试题库 >

PHP名称空间和“使用”

周宏伯
2023-03-14
问题内容

我在命名空间和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语句,则会得到:

致命错误:在第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运营商不与混淆自动加载。include通过注册自动加载器(例如,通过spl_autoload_register)自动加载类(无需使用)。您可能需要阅读PSR-4才能看到合适的自动加载器实现。



 类似资料:
  • 问题内容: 我知道这个问题已经被问了很多遍了,但是我没有得到任何适合我情况的建议,因此我在网上和这里进行搜索,尝试了所有方法,但没有任何效果。我只需要用命名空间cap解析此XML:并且只需要其中的四个条目。 我正在使用simpleXML,并且设置了一个小的简单测试脚本,它非常适合解析常规元素。我无法为自己的狄更斯找到或获得一种使用命名空间解析元素的方法。 这是一个小示例测试脚本,其中包含我正在使用

  • 我试着写了下面的代码,但不明白为什么它在spl_autoload_register()中找不到具有名称空间的类? 我得到的错误是: 警告:require_once(src/test\stringhelper.php):无法打开流:没有这样的文件或目录 autoloader.php文件: src文件夹中的stringhelper.php: 我也在使用XAMPP,如果这有区别的话。

  • 问题内容: 我正在从源头解析XML文档,并且它们使用自定义名称空间。 例如。当我使用SimpleXML进行解析时,mostix:名称空间元素均未显示或不可访问。可能是一个非常简单的解决方案,但是有什么想法吗? 问题答案: 通常,人们使用children()。

  • 问题内容: 尝试在自己的函数中使用名称空间时出现解析错误 问题答案: 从导入的作用域规则 use关键字必须在文件的最外部作用域(全局作用域)中或在名称空间声明中进行声明。这是因为导入是在编译时而不是在运行时完成的,因此无法进行块作用域 因此,您应该这样放置,使用应该在全局级别上指定

  • 我正在尝试将一个基于PHP的API从共享主机移植到Google应用程序引擎。我下载了PHPSDK,在启动器中创建了一个新的应用程序,在PHP中启用了cURL。ini(使用),现在我得到这个错误: 如果我向curl_init()添加反斜杠(告诉它不要使用MyNamespace),我会得到这个: 除了启用cURL_lite()(稍后我可能会解决这个问题,因为它不支持我需要的cURL选项),我如何解决这

  • 在OpenFOAM中,存在一个函数,其名称为exp,表示数学中的幂操作。同时,C++本身也可以进行这个计算,并且函数名称也为exp。这会导致调用的时候,编译器并不知道应该调用OpenFOAM的exp还是C++本身的exp。一种方法是将其中一个exp函数进行改名,比如将OpenFOAM中的exp改成expFoam。但还有更简单的方式。 名称空间专门用于解决上面的问题,它可作为附加信息来区分不同库中相