2012-05-22 19 views
17

Estoy usando el IDE PHPStorm y tengo problemas cuando ejecuto la inspección del código.PHPStorm: ¿corregir PHPDoc para una colección de objetos?

Tengo un método que devuelve una colección de objetos. El Collection sí es un objeto, que tiene sus propios métodos, e implementa la interfaz Traversable:

class Repository 
{ 
    public function findByCustomer(Customer $user) 
    { 
     // ... 
     return new Collection($orders); 
    } 
} 

Si documentar findByUser() para devolver un Collection, la inspección de código entiende los métodos de este objeto, pero doesn' entiendo qué objetos de la colección contiene:

/** 
* @return Collection 
*/ 
public function findByCustomer() { ... } 

Method getTotal() not found in class Collection

Si se documentan findByUser() para devolver una colección de Order objetos, la inspección de código ahora entiende lo que está dentro de la colección, pero no los métodos de la Collection sí:

/** 
* @return Order[] 
*/ 
public function findByCustomer() { ... } 

Method slice() not found in class Order[]

¿Hay una manera de especificar ambos al mismo tiempo, algo así como la sintaxis de Java?

/** 
* @return Collection<Order> 
*/ 
public function findByCustomer() { ... } 
+2

Puede combinarlos (ambos tipos) juntos. Puede no ser ideal en algunas situaciones, pero funciona y puede considerar que es mejor que especificar manualmente el tipo mediante @var PHPDoc comment. Entonces ... '/ ** @return Collection | Order [] * /' – LazyOne

+0

@LazyOne: incluso si no es el perfecto, esa es una opción más limpia para mí. ¿Puedes agregar esto como respuesta? – Benjamin

Respuesta

26

Puede combinarlos (ambos tipos) juntos. Puede no ser ideal en algunas situaciones, pero funciona y puede considerar que es mejor que especificar manualmente el tipo a través del comentario @var de PHPDoc.

/** @return Collection|Order[] */ 
+0

En ese caso, incluso puede leer: devolver colección que puede verse como una matriz de orden. – programaths

+0

Desafortunadamente, esto no parece funcionar más en PHPStorm 8: ahora comprueba que los dos tipos separados por '|' tienen el método. ¿Hay una mejor manera de escribir esto ahora? – Benjamin

+0

@Benjamin Proporcione un ejemplo de código simple para copiar y pegar (me gustaría verlo más profundamente) – LazyOne

Cuestiones relacionadas