【问题标题】:File is properly included however class doesn't exist文件已正确包含,但类不存在
【发布时间】:2016-05-09 23:13:34
【问题描述】:

我正在尝试从包含的文件扩展一个类,但是当文件被正确包含时。我收到一个致命错误,告诉我该类不存在。

这是我希望扩展类的文件。 Global.php(第 2 行)是一个自动加载函数。

namespace epsilon{
    include("global.php");
    error_reporting(E_ALL);
    ini_set('display_errors', 'on');

    class epsilon extends Database{
          static $name = "Me";
    }

Global.php

spl_autoload_register(function($class){
    $namespace = str_replace("\\","/", __NAMESPACE__);
    $class = str_replace("\\","/",$class);
    $path = __DIR__."/classes/".(empty($namespace)?"":$namespace."/")."{$class}.class.php";
    #var_dump($path);
    require_once($path);
});

最后,这个文件就是类。我想扩展 epsilon 类。

class Database{

}

致命错误:找不到类“epsilon\Database”

【问题讨论】:

  • 你能展示一下$path 的输出吗?
  • extends \epsilon\Database专门调用它是否有效?

标签: php class


【解决方案1】:

您必须在 Database 类之前添加 \,因为它不在 epsilon 命名空间下。

class epsilon extends \Database{
      static $name = "Me";
}

【讨论】:

    【解决方案2】:

    答案可能是错误的,因为最初并没有意识到 Qwentalis 试图在同一个命名空间中扩展一个类,而不是一个全局命名空间类。 我将用 Qwentalis 对 cme​​ts 的一些反馈来更新这个答案(或删除这个答案)

    类 epsilon 正在扩展 epsilon\Database,因为它是在 epsilon 命名空间中定义的,所以只需输入 class epsilon extends \Database 以强制它扩展名为 Database 的 global 命名空间类。

    您可以通过在调用前加上黑斜线来定义此行为,例如,尖括号中的内容由 PHP 假定:

    1) 您当前的通话:

    class epsilon extends <current namespace\>Database
    

    2) 您的预期呼叫(请阅读我上面的说明):

    class epsilon extends <global namespace>\Database
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-28
      • 2015-11-25
      • 2015-06-05
      • 2021-11-09
      • 2013-12-04
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      相关资源
      最近更新 更多