Глубина наследования классов PHP - PullRequest
0 голосов
/ 27 января 2011

Я пытаюсь понять, насколько глубоко идет наследование.

Например, если я начну с класса А

Класс B расширяет класс A
Класс C расширяет класс B
Класс D расширяет класс C
Класс E расширяет класс D
Класс F расширяет класс E
Класс G расширяет класс F

Большинство нижних уровней являются абстрактными классами с методами, заполненными кодом и абстрактными методами. это довольно большая и сложная структура. (делает мою голову в)

Будет ли класс G по-прежнему иметь доступ к методам и параметрам класса A, а также будет ли он иметь доступ к абстрактным методам из класса A?

Я спрашиваю, потому что у меня были проблемы с затмением, не добавляющим методы более низкого класса в автозаполнение. Я хотел бы знать, есть ли на самом деле предел этому или просто затмение достигает своего максимума для завершения кода.

Я далек от стадии, когда я могу проверить это с помощью того, что я сделал, и не хочу выяснить, когда я закончу, методы, определенные в порядке ниже, не доступны.

Ответы [ 3 ]

3 голосов
/ 27 января 2011

Похоже, проблема с вашим редактором. Например, посмотрите следующую быструю и грязную демонстрацию:

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 не накладывает на вас никаких ограничений.

2 голосов
/ 27 января 2011

Используя канонический тест , например:

<?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.

0 голосов
/ 27 января 2011

Следующие 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, и он все еще работал нормально, так что выопределенно может, звучит так, будто ваш плагин редактора выглядит так глубоко в дереве наследования

...