2011-05-06 53 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

相關問題