2013-07-31 53 views
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';} 
} 

是否有某些情况下,当类不能被继承或继承另一个类?

+1

你包括它吗? – MightyPork

+1

由于A和B都在相同的名称空间中定义,所以您只需要执行'B类扩展A' – Orangepill

+0

@MightyPork yes ..如果不需要它,它不会创建实例..在B-> __construct – StellaireMan

回答

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->__construct

那么,这是否:

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->__construct

你在B.ph失踪

​​

p文件?

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

+0

这是一段代码(它工作)只是我更大的项目的一部分(它不工作) - 一切都需要我使用自动加载器要做到这一点... 我想知道这个问题的答案“有些时候,类不能被继承或继承另一个类吗?” – StellaireMan

+0

如果继承失败,您应该会看到一条错误消息。A的一个定义是一个可能性,意思是不是从你期望的那个继承而来?为了好奇心,在同一个文件中尝试两个定义。同时检查get_parent_class(new B())的输出; – Gavin

+0

我正在尝试但每次失败 - 致命错误:在第10行中找不到D'\ xampp \ htdocs \ singular \ libs \ Singular \ Bootstrap.php中的类'Singular \ Object' (肯定 - 我已经获得了所有文件) – StellaireMan

1

我有一个类似的问题,让我发疯。作为一个测试,我甚至复制了父类,将其重命名(即抽象类的代码与文件名和类名完全相同),并继承问题是“固定的”。奇怪的!。

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

无论如何......我刚刚移动到使用spl_autoload_register(绝对要走的路)。 现在,使用spl_autoload_register和去除require_once时,我发现一个似乎已经解决了这个问题。

我知道这个回复对于原始海报来说太晚了,但我希望这可以帮助别人把他们的头发(像我一样)带出类似的问题。