Nowości w PHP 8.0

Data aktualizacji: 4.05.2024r. Autor: Bartosz Stefanicki.

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.

Zobacz także

1 komentarz