我正在努力弄清楚继承的深度。
例如,如果我从A类开始
B类扩展了A类 C级扩展B级 D类扩展了C类 E类延伸D类 F级延伸E级 G类扩展了F级
大多数较低级别是抽象类,其方法充满了代码和抽象方法。它是一个相当大而复杂的结构。 (尽我所能)
G类仍然能够访问A类方法和参数,还能访问A类的抽象方法吗?
我问,因为我在使用eclipse时遇到了麻烦,没有将低级方法添加到自动完成中。我想知道实际上是否存在限制,或者是否只是eclipse达到代码完成的最大值。
我远离一个阶段,在那里我可以用我所做的来测试这个,并且在我完成时不想找到定义中较低的方法无法访问。
答案 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的深度测试了这个并且它仍然运行得很好,所以你肯定可以,听起来你的编辑器插件只在继承树中看起来如此之深