Php 类不';t继承-未找到类

Php 类不';t继承-未找到类,php,namespaces,extending,Php,Namespaces,Extending,我在继承方面有些困难。 我有类似的东西 文件A.php namespace Main; class A{ public function __construct(){ echo 'A->__construct'; } } namespace Main; class B extends \Main\A{ /* if I write this construct and remove extends from this class - it works - but I nee

我在继承方面有些困难。 我有类似的东西

文件A.php

namespace Main;
class A{
    public function __construct(){ echo 'A->__construct'; }
}
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';}
}
和文件B.php

namespace Main;
class A{
    public function __construct(){ echo 'A->__construct'; }
}
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';}
}
在某些情况下,类是否无法继承或继承另一个类?

这是可行的

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

class B extends  A
{

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

$test = new B();
输出:

一个->\u构造

这也是:

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

class B extends  \Main\A
{

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

$test = new B();
一个->\u构造

你失踪了吗

require_once "A.php"; 
在B.php文件中


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

我遇到了一个类似的问题,这让我发疯

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

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

无论如何。。。我刚刚开始使用spl_自动加载_寄存器(绝对是最好的选择)。 现在使用spl_自动加载_寄存器,并在我发现需要时删除require_一次,似乎解决了这个问题


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

既然a和B都是在同一个名称空间中定义的,你只需执行
class B Extendes a
@MightyWork yes。。如果不需要,则不会创建实例。。在B->__construct@Orangepill那不是问题。。它应该可以工作,而tooThis是一段代码(它可以工作)只是我更大项目的一部分(它不工作的地方)-我使用autoloader来完成ir所需的一切。。。我想知道这个问题的答案“在某些情况下,类是不能继承的还是不能继承另一个类?”如果继承失败,您应该会看到一条错误消息。一种可能性的定义不止一个,这意味着不继承您期望的定义?出于好奇,请在同一文件中尝试这两个定义。还要检查get_parent_类(new B())的输出;我正在尝试,但每次都失败-致命错误:在第10行的D:\xampp\htdocs\Singular\libs\Singular\Bootstrap.php中找不到类“Singular\Object”(当然,我需要所有文件)。错误消息表明在实例化该类时未加载Singular\Object的类定义。是否有可能在自动加载程序初始化之前实例化该类?还是自动装弹机出故障了?这看起来更像是文件包含问题或命名空间问题,而不是继承问题。或实例化时是否缺少类前面的命名空间,例如$test=new main\a();而不是$test=新的A();正如我写的。。创建实例可以工作(因此文件被加载),但继承不能。。我先运行autoloader,然后再运行这个类