【问题标题】:namespaces and class extends命名空间和类扩展
【发布时间】:2012-11-10 19:43:47
【问题描述】:

我试图弄清楚命名空间在 PHP 中是如何工作的,但还没有真正走运

希望有人能告诉我我在这里做错了什么:)

代码

require_once 'Vatcode.php';
$Vatcode = new \resource\Vatcode();

Vatcode.php

namespace resource;

require_once Ini::get('path/class').'/Resource.php';

class Vatcode extends Resource {
    public function __construct(){
        echo 'works!';
    }
}

资源.php

namespace resource;

class Resource {

}

错误

Fatal error:  Class 'resource\Ini' not found in Vatcode.php

【问题讨论】:

  • 您在提供的代码中无处使用new Ini()...
  • 问题已被编辑

标签: php class namespaces


【解决方案1】:

这只是命名空间的问题。 您的类增值税代码位于命名空间资源中。如果在VatCode 声明文件中使用nameofclas::...new nameofclass(),它将尝试获取命名空间资源中的类。 如果您想在文档中使用 Ini 类,您有两种解决方案:

首先给出完整的限定名:

require \namespace\of\ini\Ini::get('path/class').'/Resource.php';

在使用 get 方法之前使用“use”键世界:

use \namespace\of\ini\Ini;
require_once Ini::get('path/class').'/Resource.php';

无论如何,如果 Ini 位于“无命名空间”中(全局命名空间 是准确的词),您只需使用我给您的解决方案,但只能使用 \Ini 而不是 @987654326 @

【讨论】:

  • Ini 类不在任何命名空间中
  • 好的..我从您的回答中假设您可以在多个维度上拥有命名空间? \first_level\second_level\the_class
  • @clarkk:所有类都在命名空间中。如果没有明确定义,则称该类位于 全局命名空间 中,可以像 \YourClass 一样引用它(注意前导反斜杠)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 2023-04-02
  • 1970-01-01
  • 2011-12-05
  • 2012-01-08
  • 2014-09-18
  • 1970-01-01
相关资源
最近更新 更多