2012-03-11 115 views
8

,我有以下代碼中的變量:自動完成一個foreach

class Orders{ 
    /** 
    * 
    * @var Supplier 
    */ 
    private $suppliers; //Array of Supplier 

    function loopAllSuppliers(){ 
     foreach($this->suppliers as $supplier){ 
      $supplier->/*no suggestion*/ //Can't get the method's to show here 

      $this->suppliers->getSupplierName(); //methods in class Supplier show normally here 
     } 
    } 
} 

的問題是容易的。我只是希望能夠爲我的變量$supplier聲明一個類型,就像我用$suppliers這樣做的方式。

注:

  • 供應商是具有一個公共方法getSupplierName類()。
  • 我正在使用Netbeans IDE。
+0

如果你的'$ suppliers'是'Supplier',那麼你的PHPDoc的註釋是錯誤的數組。在其他IDE中,您可以將這樣的數組註釋爲'@var Supplier []',您是否嘗試過? – DCoder 2012-03-11 13:46:44

+0

@DCoder是'$ suppliers'是'Supplier'的一個數組,我嘗試了'@var Supplier []',但它不起作用。實際上將它改爲'@var供應商[]'沒有提出建議'$ this-> suppliers->' – Songo 2012-03-11 21:33:23

+0

呃,如果它是一個數組,它實際上沒有任何方法,是嗎? – DCoder 2012-03-12 05:07:17

回答

13
class Orders{ 
    /** 
    * 
    * @var Supplier 
    */ 
    private $suppliers; 

    function loopAllSuppliers(){ 
     foreach($this->suppliers as $supplier){ /* @var $supplier Supplier */ 
     //Must declare the type again inside the foreach as Netbeans doesn't support 
     // defining variable as arrays in doc blocks, yet. 
     } 
    } 
} 
+2

爲什麼不只是'foreach($ this-> supplier as/* @var Supplier */$ supplier)' – srcspider 2012-05-29 11:00:35

+1

您可以在netbeans中將變量定義爲數組:/ ** @var Supplier [] * / – clauziere 2014-03-18 21:28:16

2

試試這個,如果$這個 - >供應商是一個數組:

function loopAllSuppliers(){ 
    foreach($this->suppliers as $key => $supplier){ 
     $supplier->/*no suggestion*/ //Can't get the method's to show here 

     $this->suppliers[$key]->getSupplierName(); //should work 

     $this->suppliers->getSupplierName(); //methods in class Supplier show normally here 
    } 
} 
+0

在您的解決方案中,我仍然訪問'$ this-> suppliers'來獲取方法。我正在嘗試訪問'$ supplier'的方法。 – Songo 2012-03-12 07:50:50

+0

這是一樣的。如果通過一組元素循環,則可以在任何一種方式中訪問元素的方法。 也許,您可以爲我們提供一個不符合您需要的行爲示例。 – lukassteiner 2012-03-17 11:53:39

4

這應該工作:

class Orders 
{ 
    /** 
    * @var Supplier[] 
    */ 
    private $suppliers; 

    public function loopAllSuppliers() 
    { 
     foreach($this->suppliers as $supplier) { 
     } 
    } 
} 
0

你可以做到這一點(在NetBeans)通過執行以下:

foreach ($suppliers as /* @var $supplier Supplier */ $supplier) { 
     $supplier->/*should have suggestions*/ 
    } 
2

對於我這個不工作:

foreach ($suppliers as /* @var $supplier Supplier */ $supplier) { 
    $supplier->/*should have suggestions*/ 
} 

我的解決方案:

foreach ($suppliers as $supplier) { 
    if($suppliers instancof Supplier) { 
     $supplier-> 
    } 
}