【问题标题】:How can i use code completion with fluent interface?如何通过流畅的界面使用代码完成?
【发布时间】:2011-08-20 06:57:21
【问题描述】:

我想知道如何对继承的类使用自动完成功能。例如,我有这种代码:

<?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+click 导航时,我可以找到 a 和 b 功能,但我如何才能到达 c?

谢谢。

【问题讨论】:

  • 你的意思是fluent interface,而不是autocompletion。您可能想要编辑您的问题。 :)
  • 仅供参考,它不适用于 PHP Storm。

标签: php eclipse ide phpdoc


【解决方案1】:

您必须使用正确的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 的方法(你可以调用它们)。

【讨论】:

  • 你是对的,我在我的代码中使用了该语法,但它对子类并没有更好的效果。
  • 嗯 PHP 仍然是一种动态语言,所以你只能自动完成这么多。你可以写@return A | B 在您的超类中或将它们记录为您的子类中的魔术方法(尚未测试它是否有效:manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/…
  • 我将深入研究 phpdoc 文档。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 2010-09-19
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多