类不继承 - 未找到类

时间:2013-07-31 20:25:28

标签: php namespaces extending

我有一些继承问题。 我有类似的东西

档案 A.php

namespace Main;
class A{
    public function __construct(){ echo 'A->__construct'; }
}

并提交 B.php

namespace Main;
class B extends \Main\A{
    /* if I write this construct and remove extends from this class - it works - but I need to inherit it */
    public function __construct(){ $a = new \Main\A(); }

    public function something(){ echo 'B->something';}
}

是否存在无法继承类或继承其他类的情况?

2 个答案:

答案 0 :(得分:1)

我有类似的问题让我发疯。

作为测试,我甚至复制了父类,重命名了它(即抽象类的代码与文件名和类名完全相同)并继承了问题是“修复”的。奇怪的!。

在我的情况下,我发现另一个类有一个require_once用于导致错误的类(即原始海报示例中的'B')并删除(例如)'require_once B'修复它。不知何故,我必须介绍一些循环,这导致PHP无法加载课程 - 我不知道为什么,如果有人有想法,我很想增加我的知识。

无论如何......我刚刚转到使用spl_autoload_register(绝对是要走的路)。 现在使用spl_autoload_register结合删除require_once,每当我找到一个似乎已经解决了问题。

我知道这个回复对于原版海报来说太晚了,但我希望这能帮助其他人(就像我一样)解决类似的问题。

答案 1 :(得分:0)

这很有效。

namespace Main;
class A
{
    public function __construct(){ echo 'A->__construct'; }
}

class B extends  A
{

    public function something(){ echo 'B->something';}
}

$test = new B();

输出:

  

A-> __构建

这样做:

namespace Main;
class A
{
    public function __construct(){ echo 'A->__construct'; }
}

class B extends  \Main\A
{

    public function something(){ echo 'B->something';}
}

$test = new B();
  

A-> __构建

你错过了

require_once "A.php"; 

在B.php文件中?

您可以测试将两个类定义放在同一个文件中,以查看您的问题是否与包含A.php有关。你还得到一条错误信息吗?