comandos caracteristicas php void return-type php-7

php - caracteristicas - No válido como tipo de retorno



return value php function (5)

Editar:

Se ha publicado un nuevo RFC separado para un tipo de retorno nulo , ha pasado la votación y se implementó en PHP 7.1.
Ahora hay un tipo de devolución de void en PHP. :)

Publicación original:

Tomado de wiki.php.net :

Trabajo futuro

Las ideas para el trabajo futuro que están fuera del alcance de este RFC incluyen:

  • Permitir que las funciones declaren que no devuelven nada (nulo en Java y C)

Por lo tanto, actualmente no hay forma de declarar que no devuelve nada.
No sé qué es lo mejor en su situación, pero probablemente no especifique el tipo de devolución por ahora.

Para responder a su pregunta si habrá un tipo de devolución void en PHP 7:
Aún no hay garantía , pero creo que es muy probable que el void o un sinónimo se implementen de alguna manera.

Estaba probando tipos de devolución con PHP 7.

Creé un script simple para probar los tipos de devolución de PHP 7:

<?php Class Obj { public function __construct(){ } public function test(): string { //a string needs to be returned return "ok"; } } function foo(): Obj { //instance of Obj needs to be returned return new Obj(); } $o = foo(); echo $o->test(); // output: ok

Ahora, en otros lenguajes de programación cuando especifica un tipo de devolución void , significa que no puede devolver nada o recibirá un error. Entonces escribí este guión:

<?php function foo(): void { } foo();

Ahora, en el script anterior, el resultado esperado no es nada. En cambio, me da un error fatal:

Error fatal: el valor de retorno de foo () debe ser una instancia de vacío, ninguno devuelto en la línea 2

Mi pregunta es (no pude encontrarla), ¿en PHP 7 habrá un tipo de void similar?


@BeNice Entiendo su punto, de todos modos resumo la consideración de Levi Morrison como una cuestión práctica de sostenibilidad: al presentar el void como un posible tipo de devolución de hecho, rompemos la suposición de que el único tipo posible de null es null .

De esta forma, se debe devolver el void para la verificación de tipo de null , cambiando las restricciones de la arquitectura por diseño y causando un desastre en la compatibilidad con versiones anteriores.

// your choice implies this comparison should be true: gettype(null) === void;

Creo que quien utilizó null con null frecuencia en su código soportaría la implementación del tipo de void .


Autor de los tipos de retorno RFC aquí. En PHP 7.0 no habrá tipos de devolución void ya que wiki.php.net no lo agregó y tampoco lo hizo ningún otro RFC que tenga como objetivo PHP 7.0.

El tipo void puede existir en la serie PHP 7 si decidimos que agregar nuevas palabras claves / reservadas es correcto para lanzamientos menores a pesar de que romperán el código. Esto es algo incierto, pero se hizo en PHP 5.4 con la palabra clave callable .

Personalmente, no creo que necesitemos un void ; ya tenemos null . Del manual :

El valor NULL especial representa una variable sin valor. NULL es el único valor posible de tipo nulo.

En PHP, una función que no devuelve nada devolverá null implícitamente. Esto significa que no puedes devolver nada *. Ir a la ruta null significa que no hay saltos de compatibilidad hacia atrás ya que null no será un nombre de clase / interfaz / rasgo válido que comience en PHP 7.0 y no agrega ninguna nueva clave o palabras reservadas.

* Las personas familiarizadas con el Zend Engine se darán cuenta de que no pueden devolver nada, pero si no devolvieron nada, la variable que están asignando se les asignará nulo, lo que los hace lógicamente equivalentes.

En PHP 7.1 habrá un pseudo-tipo void . Se define en Void Return Type RFC .

Personalmente, estoy triste por esto porque el autor de RFC había "dejado de fumar" previamente y había elegido el RFC. Luego, lo siguiente que sé es que está propuesto y en discusión, y ella no esperaría a que yo proponga los tipos de unión, lo que habría sido la contrapartida del vacío, como se señaló anteriormente. Oh bien.


El tipo de devolución de void fue aceptado para php 7.1. Entonces vendrá en el futuro.

Algunos ejemplos sobre cómo funcionará:

function should_return_nothing(): void { return 1; // Fatal error: A void function must not return a value } function returns_null(): void { return null; // Fatal error: A void function must not return a value } function lacks_return(): void { // valid } function returns_nothing(): void { return; // valid }

¡Vea el RFC de Andrea Faulds para más información!


No hay un tipo equivalente para void en php, return NULL; puede ajustarse a su requerimiento ya que no tiene ningún tipo como 0 o cualquier otro valor. Nota: el vacío real significa que no hay retorno.