2014-12-03 16 views
5

SpecificheSuggerimento iteratore di rigorose entità di tipo in PHPDoc

  • sto usando PhpStorm 8 IDE.
  • Supponiamo di avere qualche classe Foo che implementa l'interfaccia \Iterator e sappiamo che tutti gli elementi all'interno di tale iteratore saranno di istanza della classe Bar.

Domanda

Come suggerimento che Foo è iterabile e contiene solo gli elementi di Bar? Naturalmente, suggerimento dovrebbe mantenere le informazioni, che è istanza di Foo

Quello che ho provato finora

Se avessimo una serie di Bar casi, che poi è una cosa facile (è descritto, per esempio, nella domanda this): Bar[]. Inoltre, se l'intenzione è quella di scorrere Foo, ancora può essere risolto (più o meno) con:

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

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

Tuttavia, c'è una cosa molto importante che non è ottenibile con in-place hinting: tipo di ritorno . Se avrò un metodo che dovrebbe restituire Foo, so solo come suggerire che Foo, ma l'utente di quella funzione non sarà ancora in grado di esporre, che è effettivamente iterabile e contiene istanze Bar (come sarebbe se io 'll specificare @return Bar[] in caso di array di Bar casi)

risposta

3

Se Foo implementa Iterator allora si può suggerire il tipo di ritorno su Foo::current(). PHPStorm riconoscerà che quello che Foo::current() restituisce è il valore quando si su Foo.

Ad esempio:

<?php 

class Foo implements Iterator 
{ 
    // ... 

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

    // ... 
} 

$foo = new Foo(); 

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