2012-09-15 42 views
7

Tôi đã tìm kiếm trong một thời gian và tôi không sử dụng cụm từ tìm kiếm phù hợp hoặc tôi thiếu điều gì đó.phpdoc - xác định biến đối tượng trả về cho một phương thức

Tôi đang cố gắng tìm hiểu xem có thể sử dụng PHPdoc để xác định các biến được trả về bởi đối tượng hay không.

Nói rằng tôi có lớp sau:

class SomeClass { 
    public function staffDetails($id){ 

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

     return $object; 
    } 
} 

Bây giờ, nó là đủ dễ dàng để xác định các thông số đầu vào.

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

Câu hỏi đặt ra là có điều tương tự để xác định biến đầu ra của đối tượng được trả về bởi phương pháp được đề cập. đối tượng trả về đang quay trở lại?

+6

Tại sao bạn không chỉ có một lớp học với chủng loại, tên và tuổi tính StaffDetails? Sau đó, bạn có thể sử dụng @param StaffDetails – Ken

+1

nếu bạn không muốn tạo loại bê tông cho stdClass, bạn vẫn có thể viết '@return \ stdClass giữ loại, tên và tuổi' hoặc giải thích như vậy trong mô tả dài của khối tài liệu. Ít nhất đó là tài liệu sau đó. Điều đó sẽ không làm cho IDE của bạn kỳ diệu biết các thuộc tính mặc dù. – Gordon

+0

no - Tôi không muốn IDE biết các thuộc tính. Tôi chỉ muốn chúng được ghi lại một cách độc đáo. Đối tượng tôi đang sử dụng thực sự có khoảng 40 biến trong đó vì vậy tôi thực sự muốn biết liệu đó có phải là cách để đặt chúng ra một cách độc đáo trong một bảng như các tham số đầu vào xuất hiện hay không. Nếu không, nếu chỉ sử dụng một mô tả dài nó sẽ lộn xộn và khó đọc. – someuser

Trả lời

2

Đây là 4 năm sau, và vẫn không có vẻ như là cách để chú thích các thuộc tính của đối tượng stdClass như được mô tả ban đầu trong câu hỏi của bạn.

Bộ sưu tập đã được đề xuất trong PSR-5, nhưng điều đó dường như đã bị bắn hạ: https://github.com/php-fig/fig-standards/blob/211063eed7f4d9b4514b728d7b1810d9b3379dd1/proposed/phpdoc.md#collections

Dường như chỉ có hai tùy chọn có sẵn:

Lựa chọn 1:

Tạo một lớp bình thường đại diện cho đối tượng dữ liệu của bạn và chú thích các thuộc tính.

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

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

Phương án 2:

Tạo một lớp Struct kiểu chung chung như đề nghị của Gordon và mở rộng nó như là đối tượng dữ liệu của bạn, bằng cách sử dụng @property chú thích để xác định những gì giá trị chung là có thể tiếp cận với __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

Nếu bạn đi với tùy chọn 1, bạn có thể khai báo lớp trong một tệp được quét bởi IDE của bạn nhưng bị bỏ qua bởi dự án của bạn. Cho biết phương thức trả về một 'StaffMember', nhưng tiếp tục sử dụng' stdClass' trong quá trình cài đặt. –

Các vấn đề liên quan