2012-09-15 24 views
7

के लिए रिटर्न ऑब्जेक्ट चर परिभाषित करना मैं थोड़ी देर के लिए इस पर खोज कर रहा हूं और या तो मैं सही खोज शब्द का उपयोग नहीं कर रहा हूं या मुझे कुछ याद आ रहा है।phpdoc - एक विधि

मैं यह पता लगाने की कोशिश कर रहा हूं कि ऑब्जेक्ट द्वारा लौटाए गए चर को परिभाषित करने के लिए PHPdoc का उपयोग करना संभव है या नहीं।

class SomeClass { 
    public function staffDetails($id){ 

     $object = new stdClass(); 
     $object->type = "person"; 
     $object->name = "dave"; 
     $object->age = "46";   

     return $object; 
    } 
} 

अब, यह बहुत आसान इनपुट पैरामीटर परिभाषित करने के लिए है:

मैं निम्नलिखित वर्ग है कहो।

/** 
* Get Staff Member Details 
* 
* @param string $id staff id number 
* 
* @return object 
*/ 

class SomeClass { 
    public function staffDetails($id){ 
     $object = new stdClass(); 
     $object->type = "person"; 
     $object->name = "dave"; 
     $object->age = "46";   

     return $object; 
    } 
} 

सवाल यह है कि वहाँ वस्तु सवाल में विधि द्वारा लौटाए के उत्पादन में चर को परिभाषित ताकि एक और प्रोग्रामर इस वर्ग को खोलने और मैन्युअल रूप से विधि पर गौर क्या देखने के लिए की जरूरत नहीं है के लिए एक समान बात है वापसी वस्तु वापस आ रही है?

+6

आप क्यों नहीं बस प्रकार, नाम और उम्र गुणों के साथ एक StaffDetails वर्ग नहीं है? फिर आप @param StaffDetails – Ken

+1

का उपयोग कर सकते हैं यदि आप stdClass के लिए ठोस प्रकार नहीं बनाना चाहते हैं तो आप अभी भी '@return \ stdClass होल्डिंग प्रकार, नाम और आयु' लिख सकते हैं या दस्तावेज़ ब्लॉक के लंबे विवरण में समझा सकते हैं। कम से कम यह दस्तावेज है। इससे आपकी आईडीई जादुई रूप से संपत्तियों को नहीं जान पाएगी। – Gordon

+0

नहीं - मैं नहीं चाहता कि आईडीई गुणों को जान सके। मैं बस उन्हें अच्छी तरह से दस्तावेज करना चाहूंगा। जिस वस्तु का मैं वास्तव में उपयोग कर रहा हूं उसके अंदर लगभग 40 चर हैं इसलिए मैं वास्तव में जानना चाहता था कि इनपुट पैरामीटर जैसे टेबल में उन्हें अच्छी तरह से बाहर रखने का तरीका था या नहीं। अन्यथा अगर एक लंबे विवरण का उपयोग कर यह गन्दा हो जाता है और पढ़ने के लिए मुश्किल हो जाता है। – someuser

उत्तर

2

यहां 4 साल बाद है, और अभी भी आपके प्रश्न में वर्णित stdClass ऑब्जेक्ट के गुणों को एनोटेट करने का एक तरीका प्रतीत नहीं होता है।

संग्रह PSR-5 में प्रस्तावित किया गया था, लेकिन वह मार गिराया गया प्रतीत होता है: https://github.com/php-fig/fig-standards/blob/211063eed7f4d9b4514b728d7b1810d9b3379dd1/proposed/phpdoc.md#collections

ऐसा लगता है वहाँ केवल दो विकल्प उपलब्ध हैं:

विकल्प 1:

बनाएं एक सामान्य वर्ग आपके डेटा ऑब्जेक्ट का प्रतिनिधित्व करता है और गुणों को एनोटेट करता है।

class MyData 
{ 
    /** 
    * This is the name attribute. 
    * @var string 
    */ 
    public $name; 

    /** 
    * This is the age attribute. 
    * @var integer 
    */ 
    public $age; 
} 

विकल्प 2:

रूप Gordon ने सुझाव दिया एक सामान्य Struct प्रकार वर्ग बनाएँ और अपने डेटा वस्तु के रूप में यह विस्तार, क्या सामान्य मूल्यों __get साथ उपयोग करने के लिए संभव हो रहे हैं परिभाषित करने के लिए @property एनोटेशन का उपयोग कर और __set

class Struct 
{ 
    /** 
    * Private internal struct attributes 
    * @var array 
    */ 
    private $attributes = []; 

    /** 
    * Set a value 
    * @param string $key 
    * @param mixed $value 
    */ 
    public function __set($key, $value) 
    { 
     $this->attributes[$key] = $value; 
    } 

    /** 
    * Get a value 
    * @param string $key 
    * @return mixed 
    */ 
    public function __get($key) 
    { 
     return isset($this->attributes[$key]) ? $this->attributes[$key] : null; 
    } 

    /** 
    * Check if a key is set 
    * @param string $key 
    * @return boolean 
    */ 
    public function __isset($key) 
    { 
     return isset($this->attributes[$key]) ? true : false; 
    } 
} 

/** 
* @property string $name 
* @property integer $age 
*/ 
class MyData extends Struct 
{ 
    // Can optionally add data mutators or utility methods here 
} 
+0

यदि आप विकल्प 1 के साथ जाते हैं, तो आप कक्षा को अपने आईडीई द्वारा स्कैन की गई फ़ाइल में घोषित कर सकते हैं लेकिन आपकी प्रोजेक्ट द्वारा अनदेखा कर सकते हैं। यह बताएं कि विधि 'स्टाफ मेम्बर' लौटाती है, लेकिन कार्यान्वयन में 'stdClass' का उपयोग जारी रखें। –