2012-03-11 14 views
8

Ho il seguente codice:completa automatica per una variabile all'interno di 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 
     } 
    } 
} 

Il problema è semplice. Voglio solo essere in grado di dichiarare un tipo per la mia variabile $supplier come ho fatto con $suppliers.

Note:

  • fornitore è una classe che ha un metodo getSupplierName pubblico().
  • Sto usando Netbeans IDE.
+0

Se il '$ suppliers' è un array di' Supplier', allora la vostra annotazione PHPDoc è sbagliato. In altri IDE puoi annotare un array come '@var Supplier []', hai provato? – DCoder

+0

@DCoder yes '$ supplier' è una matrice di' Supplier' e ho provato '@var Supplier []', ma non funziona. Effettivamente cambiandolo in '@var Fornitore []' non ha fatto apparire nessun suggerimento per '$ this-> supplier->' – Songo

+0

Bene, se si tratta di un array, in realtà non ha alcun metodo, vero? – DCoder

risposta

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

Perché non solo 'foreach ($ this-> fornitori come/* fornitore @var */$ fornitore)' – srcspider

+1

È possibile definire vars come matrici in netbeans:/** @var Fornitore [] * / – clauziere

2

provare questo se $ this-> fornitori è un array:

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

Nella tua soluzione sto ancora accedendo ai '$ this-> supplier' per ottenere i metodi. Quello che sto cercando è accedere ai metodi di '$ supplier'. – Songo

+0

è lo stesso. Se esegui il ciclo su una serie di elementi, puoi accedere ai metodi di un elemento in entrambi i modi. Forse potresti fornirci un esempio funzionante che non si comporta come tu lo vuoi. – lukassteiner

4

questo dovrebbe funzionare:

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

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

si può raggiungere questo (in NetBeans) facendo il seguente:

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

Per me questo non funziona:

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

la mia soluzione:

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