2012-09-15 6 views
7

He estado buscando en esto por un tiempo y o bien no estoy usando los términos de búsqueda correctos o me falta algo.phpdoc - definición de variables de objeto de retorno para un método

Estoy tratando de averiguar si es posible usar PHPdoc para definir las variables que devuelve el objeto.

Decir que tengo la clase siguiente:

class SomeClass { 
    public function staffDetails($id){ 

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

     return $object; 
    } 
} 

Ahora bien, es bastante fácil de definir los parámetros de entrada.

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

La pregunta es ¿existe algo similar para la definición de las variables de salida del objeto devuelto por el método en cuestión para que otro programador no tiene que abrir esta clase y manualmente mirar en el método de ver lo que el ¿El objeto de retorno está volviendo?

+6

¿Por qué no simplemente una clase StaffDetails con el tipo, nombre y edad propiedades? Luego puede usar @param StaffDetails – Ken

+1

si no desea hacer un tipo concreto para stdClass, puede escribir '@return \ stdClass holding type, name and age' o explicarlo en la descripción larga del Doc Block. Al menos está documentado entonces. Sin embargo, eso no hará que tu IDE conozca mágicamente las propiedades. – Gordon

+0

no - No quiero que el IDE conozca las propiedades. Simplemente me gustaría que estén bien documentados. El objeto que estoy usando en realidad tiene alrededor de 40 variables, así que realmente quería saber si era una forma de presentarlas en una tabla como aparecen los parámetros de entrada. De lo contrario, si utiliza una descripción larga, se vuelve desordenado y difícil de leer. – someuser

Respuesta

2

Aquí están 4 años después, y todavía no parece haber una manera de anotar las propiedades de un objeto stdClass como se describió originalmente en su pregunta.

Colecciones habían propuesto en PSR-5, pero que parece haber sido derribado: https://github.com/php-fig/fig-standards/blob/211063eed7f4d9b4514b728d7b1810d9b3379dd1/proposed/phpdoc.md#collections

Parece que sólo hay dos opciones disponibles:

Opción 1:

Crear una clase normal que representa su objeto de datos y anota las propiedades.

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

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

Opción 2:

Crear una clase Struct tipo genérico según lo sugerido por Gordon y extenderlo como su objeto de datos, utilizando la anotación @property para definir lo que es posible acceder con __get valores genéricos y __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

Si opta por la opción 1, puede declarar la clase en un archivo escaneado por su IDE pero ignorado por su proyecto. Indique que el método devuelve un 'StaffMember', pero continúe usando' stdClass' en la implementación. –

Cuestiones relacionadas