2012-09-15 17 views
7

Bir süredir bu konu hakkında araştırma yapıyorum ve doğru arama terimlerini kullanmıyorum veya bir şeyleri özlüyorum.phpdoc - bir yöntem için dönüş nesne değişkenlerini tanımlamak

Nesne tarafından döndürülen değişkenleri tanımlamak için PHPdoc kullanmanın mümkün olup olmadığını anlamaya çalışıyorum.

class SomeClass { 
    public function staffDetails($id){ 

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

     return $object; 
    } 
} 

Şimdi, giriş parametrelerini tanımlamak için yeterli kolaydır:

Ben aşağıdaki sınıf olduğunu düşünelim.

/** 
* 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; 
    } 
} 

sorudur benzer bir şey, başka bir programcı bu sınıfı açıp elle ne görmek yöntem haline bakmak zorunda kalmaması söz konusu yöntem ile döndürülen nesnenin çıkış değişkenlerini tanımlamak için var dönüş nesnesi geri geliyor?

+6

Neden sadece tip, isim ve yaş özelliklerine sahip bir StaffDetails sınıfını yok mu? Daha sonra stdClass için bir beton türü yapmak istemiyorsanız @param StaffDetails – Ken

+1

'u kullanabilirsiniz. Ayrıca, '@return \ stdClass türünü, adını ve yaşını 'yazabilir veya Doc Block'un uzun açıklamasında açıklayabilirsiniz. En azından belgelendi o zaman. Bu, IDE'nizi özelliklerle sihirli bir şekilde bilmez. – Gordon

+0

no - IDE'nin özellikleri bilmesini istemiyorum. Sadece güzel bir şekilde belgelenmelerini istiyorum. Aslında kullandığım nesne içinde yaklaşık 40 değişken var, bu yüzden giriş parametrelerinin göründüğü gibi bir tabloya güzelce yerleştirmenin bir yolu olup olmadığını bilmek istedim. Aksi takdirde uzun bir açıklama kullanarak sadece dağınık ve okumak zorlaşır. – someuser

cevap

2

İşte bu 4 yıl sonra hala bir stdClass nesnesinin, sorgunuzda orijinal olarak tarif edilen özelliklerine açıklama eklemek için bir yol olarak görünmüyor.

Koleksiyonları PSR-5'de öne sürülmüştü, ama bu düşürüldüğünü görünmektedir:

Seçenek 1:

oluştur https://github.com/php-fig/fig-standards/blob/211063eed7f4d9b4514b728d7b1810d9b3379dd1/proposed/phpdoc.md#collections

yalnızca iki seçenek vardır görünüyor veri nesnesini temsil eden normal bir sınıf ve özellikleri açıklama.

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

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

Seçenek 2:

Gordon önerdiği gibi genel bir Struct tip sınıf oluşturun ve jenerik değerler __get ile erişmek mümkün ne tanımlamak için @property ek açıklama kullanarak, veri nesne olarak genişletmek ve __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

Seçenek 1 ile devam ederseniz, sınıfınızı IDE tarafından taranan ancak projeniz tarafından yok sayılan bir dosyada bildirebilirsiniz. Yöntemin bir "StaffMember" döndürdüğünü belirtin, ancak uygulamada stdClass'ı kullanmaya devam edin. –

İlgili konular