0

我在继承方面遇到了一些麻烦。我有类似的东西

文件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';}
}

是否存在类不能被继承或继承另一个类的情况?

4

2 回答 2

1

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

作为测试,我什至复制了父类,将其重命名(即抽象类的代码除了文件名和类名外完全相同)并继承问题已“修复”。诡异的!。

在我的情况下,我发现另一个类对导致错误的类有一个 require_once(即原始海报示例中的“B”)并删除(例如)“require_once B”修复了它。不知何故,我一定是引入了一些循环,这导致 PHP 无法加载类 - 我不知道为什么,如果有人有想法,我很想增加我的知识。

无论如何......我刚刚开始使用 spl_autoload_register (绝对是要走的路)。现在使用 spl_autoload_register 连同删除 require_once ,只要我发现一个似乎已经解决了问题。

我知道这个回复对于原始海报来说为时已晚,但我希望这可以帮助其他遇到类似问题的人(就像我一样)。

于 2013-11-11T15:18:43.200 回答
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 有关。此外,您是否收到错误消息?

于 2013-07-31T20:45:16.373 回答