Nowości w PHP 8.0
Sprawdźmy kolejną już, ósmą wersję tego języka. Co ciekawego w niej możemy znaleźć, czy są to przełomowe zmiany?
1. Named arguments
Na początku chciałbym wspomnieć o argumentach nazwanych. Przy korzystaniu z metod, funkcji, które posiadały wiele argumentów w tym opcjonalnych, należało po kolei je wypisywać.
foo (string $name, int $age = 18, string $color = 'blue') {}
foo ('Ania', 18, 'orange');
W PHP 8.0 można to zrobić inaczej:
foo (name: 'Ania', color: 'orange');
2. Union types
Dotychczas nie można było definiować zestawu typu wejściowych i zwracanych. Wyglądało to w ten sposób:
public function setSomething(int $something): self
{
$this->something = $something;
return $this;
}
public function getSomething(): int
{
return $this->something;
}
Od wersji PHP 8.0 możemy korzystać z łączonych typów:
public function setSomething(int|string $something): self
{
$this->something = $something;
return $this;
}
public function getSomething(): int|string
{
return $this->something;
}
3. Constructor property promotion
Kolejna nowość, dzięki której kod może być krótszy i bardziej przejrzysty. Do tej pory konstruktor w PHP 7.4 mógł wyglądać tak:
class Foo
{
public string $name;
protected int $age;
public function __construct(string $name, int $age)
{
$this->name = $name;
$this->age = $age;
}
}
I przyjemniejsza część, czyli jak to można zapisać w PHP 8.0:
class Foo
{
public function __construct(public string $name, protected int $age)
{
}
}
4. Match expression
Najprościej chyba porównać match expression do skróconej instrukcji switch. Do porównania wartości używa silnego typowania (czyli ===).
$operators = match($color) {
'orange' => 'Orange',
'green' => 'Plus',
'purple' => 'Play'
};
5. Nowy typ: mixed
Do tej pory mogliśmy wykorzystywać jako typ, np. int czy string. PHP 8.0 dodaje nowy mixed, który oznacza jeden z typów:
- array
- string
- int
- float
- bool
- callable
- null
- object
- resource
function foo(): mixed
{
}
6. Throw expressions
Dzięki tej nowości wyjątek można zwrócić w nowych miejscach.
$foo = $bar ?? throw new CustomException();
7. JIT - Just In Time
Kompilator JIT ma zapewnić szybsze wykonywanie kodu PHP. W tym momencie testy porównawcze nie wykazują dużych przeskoków w czasie wykonywania, ale być może zmieni się to w przyszłości.
8. Operator nullsafe
Dotychczasowe porównanie:
$name = $user->getAddress() ? $user->getAddress()->getStreet() : null;
I skrócone porównanie w PHP 8.0:
$name = $user->getAddress()?->getStreet();
Kalendarz wersji PHP
Zobacz także kalendarz wsparcia wersji PHP. A wy jakie znacie sztuczki w PHP 8.0?
Kategorie: PHP + MySQL. Tagi: #hosting, #php, #skrypty, #top10. Źródło obrazków: Pixabay, Font awesome.