2012-05-22 17 views
17

मैं PHPStorm आईडीई का उपयोग कर रहा हूं, और जब मैं कोड निरीक्षण चलाता हूं तो परेशानी में भाग लेता हूं।PHPStorm: ऑब्जेक्ट्स के संग्रह के लिए सही PHPDoc?

मेरे पास एक तरीका है जो वस्तुओं का संग्रह देता है। Collection ही एक वस्तु, जो अपनी ही तरीकों है, और Traversable इंटरफ़ेस लागू करता है:

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

अगर मैं दस्तावेज़ findByUser() एक Collection वापस जाने के लिए, कोड निरीक्षण इस वस्तु पर तरीकों को समझता है, लेकिन नहीं करता है ' टी समझते हैं कि संग्रह की वस्तुओं में शामिल हैं:

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

Method getTotal() not found in class Collection

अगर मैं findByUser() दस्तावेज़ Order वस्तुओं का संग्रह वापस जाने के लिए, कोड निरीक्षण अब समझता है क्या संग्रह के अंदर है, लेकिन नहीं Collection पर ही तरीके:

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

Method slice() not found in class Order[]

वहाँ निर्दिष्ट करने के लिए एक रास्ता है दोनों एक ही समय में, जावा के वाक्यविन्यास की तरह कुछ?

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

आप उन्हें (दोनों प्रकार) एक साथ जोड़ सकते हैं। कुछ परिस्थितियों में आदर्श नहीं हो सकता है, लेकिन काम करता है और आप मैन्युअल रूप से @var PHPDoc टिप्पणी के माध्यम से प्रकार निर्दिष्ट करने से बेहतर मान सकते हैं। तो ... '/ ** @ वापसी संग्रह | आदेश [] * /' – LazyOne

+0

@LazyOne: भले ही सही नहीं है, यह मेरे लिए एक क्लीनर विकल्प है। क्या आप इसे एक उत्तर के रूप में जोड़ सकते हैं? – Benjamin

उत्तर

26

आप उन्हें (दोनों प्रकार) एक साथ जोड़ सकते हैं। कुछ स्थितियों में आदर्श नहीं हो सकता है, लेकिन काम करता है और आप मैन्युअल रूप से @var PHPDoc टिप्पणी के माध्यम से प्रकार निर्दिष्ट करने से बेहतर मान सकते हैं।

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

उस स्थिति में यह भी पढ़ सकता है: ऑर्डर की सरणी के रूप में देखा जा सकता है से संग्रह संग्रह। – programaths

+0

दुर्भाग्यवश यह PHPStorm 8 में अब और काम नहीं कर रहा है: अब यह जांचता है कि '|' द्वारा अलग किए गए दोनों प्रकारों में विधि है। क्या अब इसे टाइप करने का कोई बेहतर तरीका है? – Benjamin

+0

@ बेंजामिन कृपया कॉपी-पेस्ट करने के लिए कुछ सरल कोड उदाहरण प्रदान करें (मैं इसे अपने आप को गहरा देखना चाहूंगा) – LazyOne