2009-09-07 17 views
15

¿Cuál es la sintaxis correcta para que especifique las sugerencias de tipo de devolución para un método?PHP Especifique el tipo de devolución Sugerencias para un método

Por ejemplo, tengo un procedimiento de este tipo:

private static function ConstructPDOObject($dbname) 
{ 
     $hostname =self::HOSTNAME; 
     $username = self::USERNAME; 
     $password = self::PASSWORD; 
     $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password); 
     return $dbh; 
} 

Y quiero, cada vez que llamo el método anterior, el IDE me muestran los métodos para la DOP.

¿Cómo agregar la sugerencia de tipo?

Respuesta

23

Dentro Aptana, PDT, Zend Studio y otra IDE puede agregar el tipo dando a entender a los métodos PHP como sigue:

/** 
* Constructs a new PDO Object and returns it 
* 
* @param string $dbname name of the database to connect to 
* @return PDO connection to the database 
*/ 
private static function ConstructPDOObject($dbname) 
{ 
     $hostname =self::HOSTNAME; 
     $username = self::USERNAME; 
     $password = self::PASSWORD; 
     $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password); 
     return $dbh; 
} 

El nombre de la clase se coloca después del atributo @return del bloque de documentación para significar el tipo de devolución del método. P.ej. En el caso de su método de ejemplo, PDO es el nombre de clase que se devuelve. La descripción adicional "conexión a la base de datos" se utiliza para proporcionar una descripción significativa del valor devuelto a otros desarrolladores, esto no es obligatorio, pero se recomienda.

Una de las mejores cosas para documentar sus métodos php de esta manera, es que luego puede generar documentación usando phpDocumentor o doxygen.

+1

Me llegaba la misma pregunta similar a la de Graviton: su respuesta es una solución usando las capacidades de análisis de código IDE y no una especificación de PHP. De todos modos, +1 porque funciona. – Benj

+0

Puede verificar el tipo de devolución al prefabricarlo antes de devolverlo, pero solo verifica si el resultado devuelto se puede convertir al tipo especificado. Ver [php.net/manual/en/language.types.type-juggling.php] (Gracias al usuario de StackOverflow DhruvPathak) – Benj

5

PHP no es compatible con la sugerencia de tipo en los tipos de devolución. Quizás debas agregar un bloque de documentación que declare el tipo de devolución y quizás tu IDE lo recoja (no sé si lo hará o no).

+0

confirmada con NetBeans 8.1! Gracias por la pista – CHaP

4

La insinuación IDE se realiza a través de los comentarios. Aquí hay un ejemplo de uno de mis complementos de ZEND Front.

<?php 

/** 
* Initializes Application wide authentication 
* 
* @author Lance Rushing 
* @since 2009-06-01 
* @param Zend_Session $session 
* @return Zend_Auth <--- gives IDE Hint 
*/ 
protected function initAuth($session) 
{ 
    $auth = Zend_Auth::getInstance(); 
    require_once 'AuthStorage.php'; 
    $auth->setStorage(new My_AuthStorage($session)); 
    return $auth; 
} 
17

Para referencia futura, esto se implementa para PHP 7, con la siguiente sintaxis (citado de la fuente):

function foo(): array { 
    return []; 
} 

Para responder a su pregunta ahora, a partir de PHP 7 (lanzado en torno a finales de 2015) usted será capaz de hacer lo siguiente (como ejemplo):

<?php 

function ConstructPDOObject($hostname, $dbname, $username, $password): PDO 
{ 
    $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password); 
    return $dbh; 
} 

la especificación también permite hinting tipo dentro y contra las interfaces; para aquellos de nosotros interesados ​​en adherirnos a los principios SÓLIDOS.

Fuente y más información: https://wiki.php.net/rfc/return_types

Cuestiones relacionadas