Question

J'utilise NetBeans comme IDE.Chaque fois que j'ai du code qui utilise une autre fonction (généralement une usine) pour renvoyer un objet, je peux généralement procéder comme suit pour faciliter les indications :

/* @var $object FooClass */
$object = $someFunction->get('BarContext.FooClass');
$object-> // now will produce property and function hints for FooClass.

Cependant, lorsque j'utilise la propriété d'un objet pour stocker cette classe, je ne sais pas comment faire de même, car trying to use @var $this->foo or @var foo ne transmettra pas l'allusion :

use Path\To\FooClass;

class Bar
{
    protected $foo;

    public function bat()
    {
        $this->foo = FactoryClass::get('Foo'); // Returns an instance of FooClass

        $this->foo //does not have hinting in IDE
    }
}

J'ai essayé dans le docblock pour la classe, ou en utilisant les commentaires en ligne ci-dessus protected $foo ou où foo est défini sur l'instance.

La seule solution que j'ai trouvée jusqu'à présent est de :

public function bat()
{
    $this->foo = FactoryClass::get('Foo');

    /* @var $extraVariable FooClass */
    $extraVariable = $this->foo;

    $extraVariable-> // now has hinting.
}

J'aimerais vraiment que l'indication soit à l'échelle de la classe, car de nombreuses autres fonctions pourraient potentiellement l'utiliser. $this->foo, et connaître les méthodes et propriétés de la classe serait utile.

Il existe sûrement un moyen plus simple...

Était-ce utile?

La solution

Je ne peux pas dire comment cela fonctionne dans Netbeans, mais à PHPeclipse, vous ajouteriez l'indice à la déclaration de la variable elle-même:

use Path\To\FooClass;

class Bar
{
    /**
     * @var FooClass
     */
    protected $foo;

    public function bat()
    {
        $this->foo = FactoryClass::get('Foo'); // Returns an instance of FooClass

        $this->foo // should now have hinting
    }
}

Autres conseils

Donné

class Bar
{
    protected $foo;

    public function bat()
    {
        $this->foo = FactoryClass::get('Foo'); // Returns an instance of FooClass

        $this->foo //does not have hinting in IDE
    }
}

L'IDE essaie d'obtenir la déclaration de FactoryClass::get qui n'a probablement pas de type de retour docblock.Le problème est que si cette méthode d'usine peut renvoyer un nombre quelconque de classes, vous ne pouvez pas faire grand-chose à part utiliser votre solution de contournement.

Sinon, il ne fera pas la différence entre FactoryClass::get('Foo') ou FactoryClass::get('Bar') puisque ces deux appels renverraient très probablement des objets de types différents.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top