Как я могу использовать завершение кода с свободным интерфейсом? - PullRequest
0 голосов
/ 06 мая 2011

Интересно, как использовать автозаполнение с унаследованным классом.Например, у меня есть такой код:

<?php
    class A {

        /**
         * @return $this
         */
        function a(){
            return $this;
        }

        /**
         * @return $this
         */
        function b(){
            return $this;
        }
    }

    class B extends A{
        function c() {
        }
    }

    $object = new b();
    $object->a()->b()->c();
    ?>

Когда я пытаюсь перемещаться с помощью Ctrl + клик, я могу найти функцию a и b, но как мне добраться до c?

Спасибо.

1 Ответ

3 голосов
/ 06 мая 2011

Вы должны использовать правильную документацию в стиле PHPDoc для Eclipse, чтобы добавить автозаполнение. В вашем операторе @return вы должны указать фактический тип (имя вашего класса), а не переменную:

<?php
    class A {

        /**
         * @return A
         */
        function a(){
            return $this;
        }

        /**
         * @return A
         */
        function b(){
            return $this;
        }
    }

    class B extends A{
        /**
         * @return B
         */
        function c() {
        }
    }

    $object = new B();
    $object->a()->b()->c();
?>

Теперь в вашем примере проблема в том, что он не будет работать с подклассом, потому что в документации сказано, что вы, например. for $ object-> a () возвращает экземпляр класса A. Поэтому автозаполнение не будет показывать методы из класса B (хотя вы можете вызывать их).

...