2012-03-11 83 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-> 
    } 
}