我有一些继承问题。 我有类似的东西
档案 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';}
}
是否存在无法继承类或继承其他类的情况?
答案 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有关。你还得到一条错误信息吗?