2012-03-11 13 views
8

tengo el siguiente código:completa automático para una variable dentro de un 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 
     } 
    } 
} 

El problema es fácil. Solo quiero poder declarar un tipo para mi variable $supplier así como lo hice con $suppliers.

Notas:

  • proveedor es una clase que tiene un método getSupplierName pública().
  • Estoy usando Netbeans IDE.
+0

Si su '$ suppliers' es una matriz de' Supplier', entonces su anotación phpDoc está mal. En otros IDEs puede anotar una matriz como '@var Supplier []', ¿lo ha intentado? – DCoder

+0

@DCoder yes '$ suppliers' es una matriz de' Supplier' y probé '@var Supplier []', pero no funciona. Realmente cambiándolo a '@var Supplier []' no aparece ninguna sugerencia para '$ this-> suppliers->' – Songo

+0

Bueno, si se trata de una matriz, en realidad no tiene ningún método, ¿o sí? – DCoder

Respuesta

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

¿Por qué no simplemente 'foreach ($ this-> suppliers as/* @var Supplier */$ supplier)' – srcspider

+1

Puede definir vars como matrices en netbeans:/** @var Supplier [] * / – clauziere

2

probar esto si $ this-> proveedores es una matriz:

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

En su solución, sigo accediendo a '$ this-> suppliers' para obtener los métodos. Lo que intento es acceder a los métodos de '$ proveedor'. – Songo

+0

que es lo mismo. Si recorre una matriz de elementos, puede acceder a los métodos de un elemento de cualquier forma. Tal vez, podría proporcionarnos un ejemplo de trabajo que no se comporte de la manera que lo desea. – lukassteiner

4

esto debería funcionar:

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

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

se puede lograr esto (en NetBeans) haciendo lo siguiente:

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

Para mí esto no funciona:

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

mi solución:

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