PHP类继承深度

时间:2011-01-26 23:02:17

标签: php eclipse class-design

我正在努力弄清楚继承的深度。

例如,如果我从A类开始

B类扩展了A类 C级扩展B级 D类扩展了C类 E类延伸D类 F级延伸E级 G类扩展了F级

大多数较低级别是抽象类,其方法充满了代码和抽象方法。它是一个相当大而复杂的结构。 (尽我所能)

G类仍然能够访问A类方法和参数,还能访问A类的抽象方法吗?

我问,因为我在使用eclipse时遇到了麻烦,没有将低级方法添加到自动完成中。我想知道实际上是否存在限制,或者是否只是eclipse达到代码完成的最大值。

我远离一个阶段,在那里我可以用我所做的来测试这个,并且在我完成时不想找到定义中较低的方法无法访问。

3 个答案:

答案 0 :(得分:3)

听起来像你的编辑器有问题。例如,请参阅以下快速和肮脏的演示:

php > class a { function foo() { echo "A::foo()\n"; } }
php > $letters = range('a', 'z');
php > for ($i = 0; $i < 25; $i++) { eval("class {$letters[$i+1]} extends {$letters[$i]} {}"); }
php > $z = new z;
php > $z->foo();
A::foo()

PHP不会对您施加任何类似的限制。

答案 1 :(得分:2)

使用canonical test这样:

<?php
abstract class A {
    abstract function getValue();
}
abstract class B extends A{ }
abstract class C extends B{ }
abstract class D extends C{ }
abstract class E extends D{ }
abstract class F extends E{ }
class G extends F{

}
?>

人们会发现一个致命错误,G实际上并没有实现A中定义的抽象方法。正如您从上面的链接中看到的那样,实际上就是这种情况。

因此,虽然这是一个深度继承,但它低于PHP所具有的任何限制(如果有的话)。相反,您可能会遇到PDT中的索引器问题。

答案 2 :(得分:-1)

以下php:

class A
{
    public function FooA()
    {
        echo "A!!";
    }
}

class B extends A
{
    public function FooB()
    {
        echo "B!!";
    }
}

class C extends B
{
    public function FooC()
    {
        parent::FooB();
        parent::FooA();
    }
}

$test = new C();
$test->FooC();

打印:

B!!A!!

我在50的深度测试了这个并且它仍然运行得很好,所以你肯定可以,听起来你的编辑器插件只在继承树中看起来如此之深