2011-05-06 32 views
0

我不知道如何使用自动完成与继承类。对于为例,我有这样的代码:如何使用流畅界面的代码完成?

<?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进行导航+单击我能找到一个和b功能,但我怎么能达到C吗?

谢谢。

+1

你的意思是称为'流畅接口',而不是'自动补全'。你可能想编辑你的问题。 :) – 2011-05-06 15:27:05

+0

感谢您的提示。 – 2011-05-06 15:28:11

+0

有关信息,它不适用于PHP Storm。 – 2011-05-16 15:39:42

回答

3

您必须使用正确的PHPDoc样式文档才能添加自动完成功能。在您的@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(); 
?> 

现在您的例子的问题是,它不会真正与子类的工作,因为文档说你例如对于$ object-> a()返回类A的一个实例。因此,自动完成不会显示类B的方法(你可以调用它们)。

+0

你是对的,我在我的代码中使用了这种语法,并且它对于子类不起作用。 – 2011-05-06 15:55:16

+0

那么PHP是一个动态语言,所以你只能自动完成那么多。你可以写@return A | B或者将它们记录为子类中的魔术方法(未测试它是否可用):http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_tags.method.pkg.html) – Daff 2011-05-06 16:04:01

+0

使用phpdoc文档进行挖掘。谢谢。 – 2011-05-06 16:43:43

相关问题