type - void php




php7 void tipo de retorno no funciona? (4)

Tengo un problema con los tipos de devolución en php7, especialmente "void".

funciona con todos los otros tipos, int, string, null, bool, objetos de clase.

pero cuando uso void, espero que devuelva una instancia de object void, pero en realidad no debería esperar ninguna devolución, ya que para eso es void.

nota: estoy ejecutando PHP 7.0.3

Aquí está el código:

   public static function setResponseCode(int $code) : void
    {
        http_response_code($code);

    }

y el mensaje de error es:

TypeCrror no capturado: el valor de retorno de CodeBase \ HttpRequester :: setResponseCode () debe ser una instancia de void, ninguno devuelto en /var/www/html/src/HttpRequester.php:86 Trace stack: # 0 / var / www / html / index.php (103): CodeBase \ HttpRequester :: setResponseCode (500) # 1 {main} lanzado en /var/www/html/src/HttpRequester.php en la línea 86


¿Por qué no solo usar

   function printLn($a) {
    echo $a;
    return;}

Es lo mismo que vacío.

Incluso puedes eliminar el retorno con solo el eco.



No hay, hasta PHP 7.1. Para PHP 7.0, debe omitir el tipo de retorno completamente para las funciones / métodos void .

function printLn($a) {
    echo "$a\n";
}

Desafortunadamente, entonces no tiene seguridad de tipo para esta función / método, y no se lanzará TypeError si comienza a devolver algo de ella.

Por suerte, wiki.php.net/rfc/void_return_type :

Se agrega soporte para un nuevo tipo de retorno de vacío. Requiere que una función no devuelva ningún valor.

Esta es la sintaxis correcta para PHP 7.1 :

function should_return_nothing(): void {
    return 1; // Fatal error: A void function must not return a value
}

Esto se pospuso durante la propuesta que creó sugerencias de tipo de retorno :

Mantenemos las opciones de tipo actuales . Las propuestas anteriores han sugerido nuevos tipos como void, int, string o escalar; Este RFC no incluye ningún tipo nuevo. Tenga en cuenta que permite que self y parent se utilicen como tipos de retorno. ...

Trabajo futuro

Las ideas para trabajos futuros que están fuera del alcance de este RFC incluyen :

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

NULL tampoco está permitido como tipo de retorno.


tl; dr

El tipo de retorno void funciona desde PHP 7.1 que ya está disponible.

La sintaxis de trabajo es:

<?php
function procedure(): void
{
//  return 'will not work';
}

echo procedure();




php-7