Sugerencias de tipo de retorno en PHP 7

Las características de sugerencias de tipo no se limitan solo a los parámetros de función; a partir de PHP 7, se expanden para funcionar los valores de retorno también. Las mismas reglas que se aplican a los parámetros de las funciones, se aplica a la función de retorno tipo de sugerencia. Para especificar un tipo de retorno de función, simplemente seguimos la lista de parámetros con dos puntos y el tipo de retorno, como se muestra en el siguiente ejemplo:

function register(string $user, int $age) : bool {
 // logic ...
 return true;
}

Los desarrolladores aún pueden escribir funciones con múltiples declaraciones de retorno condicionadas; es solo que en este caso, cada una de estas declaraciones de devolución, cuando se alcance, tendrá que coincidir con el tipo de retorno insinuado, de lo contrario se lanzará \ TypeError.

Las sugerencias de tipo de retorno de función funcionan muy bien con supertipos. Echemos un vistazo al siguiente ejemplo:

class A {}
class B extends A {}
class C extends B {}
function getInstance(string $type) : A {
 if($type == 'A') {
 return new A();
 }elseif ($type == 'B') {
 return new B();
 }else {
 return new C();
 }
 }
getInstance('A'); #object(A)#1 (0) { }
getInstance('B'); #object(B)#1 (0) { }
getInstance('XYZ'); #object(C)#1 (0) { }

Vemos que la función se ejecuta bien para los tres tipos. Dado que B extiende a A directamente y C extiende a B, la función los acepta como el valor de retorno.

Dada la naturaleza dinámica de PHP, los tipos de retorno de funciones pueden parecer un paso en la dirección equivocada al principio, más aún porque una gran cantidad de código PHP ya usa la anotación PHPDoc @return, que funciona muy bien con las herramientas IDE modernas, como PhpStorm. Sin embargo, la anotación @return es meramente informativa, no impone un tipo de retorno real durante el tiempo de ejecución, y realmente tiene sentido solo con un IDE potente.

El uso de las sugerencias de tipo de retorno de función garantiza que nuestras funciones devuelvan lo que pretendíamos que devolvieran. No se interponen en el camino de la naturaleza dinámica de PHP; simplemente lo enriquecen desde una función del consumidor como punto de uso.

Comparte