Tipos de retorno nullables en PHP7
PHP 7 introduce declaraciones de tipo de retorno. Lo que significa que ahora puedo indicar que el valor devuelto es una cierta clase, interfaz, matriz, llamable o uno de los tipos escalares recién insinuables, como es posible para los parámetros de función.
function returnHello(): string {
return 'hello';
}
A menudo sucede que un valor no siempre está presente, y que puede devolver algo de algún tipo, o null. Si bien puede hacer que los parámetros sean nullables estableciendo su valor predeterminado en null (DateTime $time = null
), no parece haber una forma de hacerlo esto para los tipos de retorno. ¿Es ese el caso, o de alguna manera no estoy encontrando cómo hacerlo? Estos no funcionan:
function returnHello(): string? {
return 'hello';
}
function returnHello(): string|null {
return 'hello';
}
2 answers
PHP 7.1 ahora soporta tipos de retorno nullables. El primer RFC al que enlacé es el que buscaron:
function nullOrString(int $foo) : ?string
{
return $foo%2 ? "odd" : null;
}
Antigua respuesta:
Dado que mi comentario fue en realidad una respuesta a la pregunta:
PHP 7 no soportará tipos de retorno nullables por el momento, pero hay un RFC para abordar precisamente eso, su objetivo es aterrizar en PHP 7.1. Si pasa, la sintaxis afectaría a todas las sugerencias de tipo (tanto los tipos de retorno como las sugerencias de tipo):
public function returnStringOrNull(?array $optionalArray) : ?string
{
if ($optionalArray) {
return implode(', ', $optionalArray);//string returned here
}
return null;
}
También Hay un compitiendo RFC para agregar tipos de unión, que serían capaces de hacer lo mismo, pero se verían diferentes:
public function returnStringOrNull(array|null $optionalArray) : string|null
{
if ($optionalArray) {
return implode(', ', $optionalArray);//string returned here
}
return null;
}
Por ahora, sin embargo, tendrás que escribir:
public function returnStringOrNull( array $optionalArray = null)
{
if ($optionalArray) {
return implode(', ', $optionalArray);
}
}
O simplemente devuelve una cadena vacía para ser consistente con el tipo devuelto, y marca falsy value:
public function returnStringOrNull( array $optionalArray = null) : string
{
if ($optionalArray) {
return implode(', ', $optionalArray);
}
return '';
}
//call
$string = $x->returnStringOrNull();
if (!$string) {
$string = $x->returnStringOrNull(range(1, 10));
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-26 22:43:35
Los tipos nullables están disponibles en PHP 7.1.
Este es un ejemplo de sintaxis:
public function getName(): ?string
{
return $this->name; // name can be null
}
PHP 7.1 ahora es GA y puede actualizar desde PHP 7.0 (solo hay unos pocos cambios incompatibles hacia atrás que debe verificar)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-02 07:44:39