2012-09-15 18 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類?然後你可以使用@參數StaffDetails – Ken

+1

如果你不想爲stdClass創建一個具體的類型,你仍然可以編寫'@return \ stdClass控制類型,名字和年齡',或者在Doc Block的詳細描述中解釋。至少它是記錄在案的。這不會讓你的IDE奇蹟般地知道屬性。 – Gordon

+0

不 - 我不想讓IDE知道屬性。我只是想很好地記錄他們。我實際使用的對象中有大約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:

創建一個通用Struct型類由Gordon的建議,並將其延伸爲您的數據對象使用@property註釋來定義哪些通用的值是可能的__get訪問和__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,則可以將該類聲明爲由IDE掃描的文件,但被項目忽略。聲明該方法返回一個'StaffMember',但在實現中繼續使用'stdClass'。 –

相關問題