2014-12-03 12 views
5

BesonderheitenHint Iterator strenger Typ Entitäten in PHPDoc

  • I PhpStorm 8 IDE verwenden.
  • Angenommen, wir haben eine Klasse Foo, die die Schnittstelle \Iterator implementiert, und wir wissen, dass alle Elemente in diesem Iterator der Instanz Bar angehören.

Frage

Wie andeuten, dass Foo iterable und enthält nur Elemente von Bar? Natürlich Hinweisinformationen behalten sollte, dass es Instanz Foo

Was ich bisher versucht

Wenn wir eine Reihe von Bar Instanzen hatten, dann ist das eine einfache Sache ist (es ist beispielsweise beschrieben, in this Frage): Bar[]. Auch wenn die Absicht durch Foo laufen ist, kann es immer noch aufgelöst (mehr oder weniger) wird mit:

//assume that $foo is instance of Foo 
//.. 

/* @var $object Bar */ 
foreach ($foo as $object) { 
} 

Allerdings gibt es eine sehr wichtige Sache, die nicht erreichbar mit an Ort und Stelle ist Hinting: Rückgabetyp . Wenn ich eine Methode habe, die Foo zurückgeben soll, weiß ich nur, wie man das anweist Foo, aber Benutzer dieser Funktion wird noch nicht aussetzen können, dass es tatsächlich iterable ist und Bar Instanzen enthält (wie es wäre, wenn ich ‚@return Bar[] im Fall mit Array von Bar Instanzen angeben ll)

Antwort

3

Wenn Foo implementiert Iterator dann können Sie den Rückgabetyp auf Foo::current() andeuten. PHPSstorm erkennt, dass der Wert Foo::current() den Wert zurückgibt, wenn Sie foreach über Foo.

Zum Beispiel:

<?php 

class Foo implements Iterator 
{ 
    // ... 

    /** 
    * @return Bar 
    */ 
    public function current() 
    { 
     // ... 
    } 

    // ... 
} 

$foo = new Foo(); 

foreach ($foo as $object) { 
    // PHPStorm will recognise $object is type Bar. 
}