9
votes

Auto complète pour une variable à l'intérieur d'une forise

J'ai le code suivant:

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
        }
    }
}


5 commentaires

Si votre $ fournisseurs est un tableau de fournisseur , alors votre annotation phpdoc est fausse. Dans d'autres IDes, vous pouvez annoter un tel tableau comme @var fournisseur [] , avez-vous essayé cela?


@DCoder OUI $ Fournisseurs est une matrice de fournisseur et j'ai essayé @var fournisseur [] , mais ça ne marche pas. En train de le modifier en @var fournisseur [] Aucune suggestion apparaît pour $ ceci-> Fournisseurs ->


Eh bien, si c'est un tableau, il n'a pas réellement aucune méthode, n'est-ce pas?


hmmmm Il semble que la solution consiste à trouver l'annotation pour déclarer une variable en tant que réseau d'objets dans NetBeans. Je ne trouve pas la syntaxe pour cela.


La syntaxe d'annotation / balise appropriée ici est en effet "Var fournisseur []". Cela sera bientôt normalisé et les IDES commenceront probablement à ajouter une autocopompetion basée sur la vue de cette syntaxe un jour après sa normalisation.


6 Réponses :


2
votes

Essayez ceci si $ ceci-> Fournisseurs est un tableau:

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
    }
}


2 commentaires

Dans votre solution, j'accède toujours à la $ ceci-> fournisseurs pour obtenir les méthodes. Ce que j'essaie, c'est d'accéder aux méthodes de $ fournisseur .


C'est la même chose. Si vous bouclez à travers une gamme d'éléments, vous pouvez accéder aux méthodes d'un élément de chaque sens. Peut-être que vous pourriez nous fournir un exemple de travail qui ne se comporte pas comme vous le souhaitez.



18
votes
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 commentaires

Pourquoi pas seulement foreach ($ ceci-> fournisseurs AS / * @var fournisseur * / $ fournisseur)


Vous pouvez définir des vars sous forme de tableaux dans NetBeans: / ** @var fournisseur [] * /



4
votes

Cela devrait fonctionner:

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

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


0 commentaires

0
votes

Vous pouvez y parvenir (dans Netbeans) en procédant comme suit:

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


0 commentaires

4
votes

Pour moi, cela ne fonctionne pas: XXX Pré>

Ma solution: P>

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


0 commentaires

-1
votes

avec PHP7 et Phpstorm, je peux utiliser:

use path/to/Supplier; //needs the path for your class Supplier

foreach ($suppliers as /* @var $supplier Supplier */ $supplier) {
    echo $supplier->getName(); //Output each Name
}


0 commentaires