La nueva versión de PHP ya está aquí, en su versión 8.0, nos trae una serie de mejoras que todos los desarrolladores vamos a agradecer, union types, named arguments, mixed y nullsafe entre otros.
El Mayor Cambio es su compilador JIT (Just In Time Compilator)
Esta funcionalidad, que estuvo a punto de ser incluida en la versión 7.4, lleva años siendo desarrollada y supone un gran cambio para el ecosistema PHP. Por lo menos para el desarrollo de aplicaciones web, su rendimiento no es nada excepcional en comparación con el uso del intérprete.
Otros Cambios
- Expresiones Match
PHP incorpora una nueva expresión de coincidencia similar a switch, pero dotada de una semántica más segura, así como de la capacidad de devolver valores. Veamos un ejemplo de codigo:
// Antes switch ($this->lexer->lookahead['type']) { case Lexer::T_SELECT: $statement = $this->SelectStatement(); break; case Lexer::T_UPDATE: $statement = $this->UpdateStatement(); break; case Lexer::T_DELETE: $statement = $this->DeleteStatement(); break; default: $this->syntaxError('SELECT, UPDATE or DELETE'); break; } // Ahora $statement = match ($this->lexer->lookahead['type']) { Lexer::T_SELECT => $this->SelectStatement(), Lexer::T_UPDATE => $this->UpdateStatement(), Lexer::T_DELETE => $this->DeleteStatement(), default => $this->syntaxError('SELECT, UPDATE or DELETE'), };
- Nuevo Operador NullSafe
Gracias al operador Nullsafe a partir de esta versión de PHP, no tendremos que andar comprobando condiciones nulas, simplemente deberemos utilizar este nuevo operador. Veamos ejemplo en codigo:// Antes relizabamos esta
$country = null;
if ($session !== null) {
$user = $session->user;
if ($user !== null) {
$address = $user->getAddress();
if ($address !== null) {
$country = $address->country;
}
}
}
// Ahora mas simple
$country = $session?->user?->getAddress()?->country
;
- Union Typer
Una característica muy poderosa de otros lenguajes de programación. Ahora podremos utilizar múltiples tipos de datos para argumentos, datos de retorno y propiedades en lugar de poder utilizar únicamente un tipo de dato.
class Number {
/**
* @var int|float $number
*/
private $number;
/**
* @param int|float $number
*/
public function setNumber($number) {
$this->number = $number;
}
/**
* @return int|float
*/
public function getNumber() {
return $this->number;
}
}
class Number {
private int|float $number;
public function setNumber(int|float $number): void {
$this->number = $number;
}
public function getNumber(): int|float {
return $this->number;
}
}
Aún hay muchos cambios más, por esto le recomendamos que lea y conozca más con la documentación oficial, AQUÍ.