2016-03-25 14 views
1

Bir yerde özel bir not eklemem gerektiğini hayal ediyorum ama parmaklarımı geçerken, PhpStorm'un garip miras kalıpları verilen dönüş türlerini çözecek kadar akıllı olduğunu düşünüyorum. Ben UserCollection::getFirst() çağırdığınızda ben MessageCollection::getFirst() çağırdığınızda bir Message anlaşılmaktadır ederken User, iade edildi anlaşılmaktadır eğerPhpStorm'un bu yöntemin dönüş türünü çıkarması mümkün mü?

<?php 

class Collection extends \ArrayObject 
{ 
    public function __construct(array $items) 
    { 
     foreach ($items as $key => $value) { 
      if (isset(static::$requiredType) && !$item instanceof static::$requiredType) 
       $this->offsetSet($key, $value); 
     } 
    } 

    public function getFirst() 
    { 
     return $this->offsetGet(0); 
    } 
} 

class MessageCollection extends Collection 
{ 
    protected static $requiredType = 'Message'; 
} 

class UserCollection extends Collection 
{ 
    protected static $requiredType = 'User'; 
} 

bunu istiyorum:

Örneğin, ben bu andıran bazı kod var Iade edildi. Bu sonuca ulaşmak için bir yere koyabileceğim bir açıklama var mı?

ilk düşüncem böyle bir şeydi:

/** 
    * @return Message|User|XXXX|YYYY|ZZZZ|AAAA|BBBB|CCCC|DDDD 
    */ 
    public function getFirst() 
    { 
     return $this->offsetGet(0); 
    } 

ama ben daha tahsilat sınıfları eklendikçe bu yararsız olma noktasına biraz saçma alacağı düşünün.

cevap

2

bu deneyin:

/** 
* @method \User getFirst() 
*/ 
class UserCollection extends Collection 
{ 
    protected static $requiredType = 'User'; 
} 
+0

Ben bu düşünce gibi. Benzer bir açıklama, "foreach" döngülerinde de çalışabilir mi? – johncorser

+0

foreach için böyle bir şey kullanabilirsiniz: '/ ** @var \ User [] $ items * /'. – Dmitry

+0

Benim foreach döngüsünü her yazdığımda kodumda böyle yorumların nasıl yazıldığını anlayamıyorum ... – johncorser