Neuroróżnorodność w miejscu pracy
28.11.20232 min
Bulldogjob

Bulldogjob

PHP 8.3 - przegląd nowości

Sprawdź, co nowego w PHP 8.3 po premierze wersji języka z pełnym wsparciem.

PHP 8.3 - przegląd nowości

PHP to nadal (mimo wieloletnich prognoz o jego śmierci) popularny język skryptowy do obsługi stron internetowych. Język doczekał się aktualizacji do wersji 8.3, która będzie miała pełne wsparcie. Wydanie obiecuje nie tylko poprawę wydajności, ale i ułatwienie pracy programistom. Przyjrzyjmy się konkretom.

Jawne deklarowanie typów stałych w klasach

Jednym z kluczowych punktów tej nowej wersji jest wprowadzenie możliwości jawnej deklaracji typów dla stałych w klasach, interfejsach, traitach oraz enumach. Może to znacząco zwiększyć czytelność kodu oraz poprawić jego bezpieczeństwo.

interface I {
    const string PHP = 'PHP 8.3';
}

class Foo implements I {
    const string PHP = [];
}

// Fatal error: Cannot use array as value for class constant
// Foo::PHP of type string

json_validate

W poprzednich wersjach najpopularniejszą metodą sprawdzenia poprawności ciągu znaków, który powinien być JSON-em było zdekodowanie go i sprawdzenie, czy pojawiły się jakieś błędy. To nie było zbyt wygodne, ale teraz jest zdecydowanie lepsza opcja. Funkcja json_validate sprawdza czy ciąg znaków to poprawny JSON i zwraca true lub false. Proste i dodatkowo jest to wydajniejsze niż json_decode.

var_dump(json_validate('{ "test": { "foo": "bar" } }')); // true

Pozostałe funkcje i usprawnienia

  • Uproszczona składnia dynamicznego pobierania stałych
    class Foo {
        const PHP = 'PHP 8.3';
    }
    
    $searchableConstant = 'PHP';
    
    var_dump(Foo::{$searchableConstant});​
  • Możliwość zmiany właściwości readonly w czasie głębokiego kodowania. Takiej modyfikacji można dokonać tylko wewnątrz method __clone.
  • Nowy atrybut #[\Override], który wyraża intencję w kodzie i pozwala na walidację, czy metoda z taką samą nazwą istnieje w klasie nadrzędnej lub w którymkolwiek z zaimplementowanych interfejsów.
use PHPUnit\Framework\TestCase;

final class MyTest extends TestCase {
    protected $logFile;

    protected function setUp(): void {
        $this->logFile = fopen('/tmp/logfile', 'w');
    }

    #[\Override]
    protected function taerDown(): void {
        fclose($this->logFile);
        unlink('/tmp/logfile');
    }
}

// Fatal error: MyTest::taerDown() has #[\Override] attribute,
// but no matching parent method exists
  • Poprawiony interfejs wiersza poleceń, który teraz akceptuje zmienne dane wejściowe dotyczące nazw plików, które mają być sprawdzone pod kątem błędów.
  • Rozszerzenie Random Extension, dodane już w PHP 8.2, wzbogaciło się o nową metodę generowania losowych ciągów bajtów, co ułatwia generowanie identyfikatorów czy nazw domenowych o zadanej długości.
  • Możliwość oznaczania klas anonimowych jako tylko do odczytu.

Podsumowanie

Aktualizacja do tej wersji nie tylko minimalizuje potencjalne problemy związane z bezpieczeństwem czy kompatybilnością, ale także umożliwia programistom przystępniejsze pisanie czytelnego oraz wydajnego kodu.

Z racji na to, że poprzednie wersje PHP, w tym chociażby 8.0, osiągnęły koniec swojego cyklu życia, strony internetowe używające tych wersji, pozostają narażone na ryzyko ataków i problemów ze zgodnością. Aktualizacja do najnowszej wersji PHP 8.3 jest zdecydowanie zalecana dla tych, którzy chcą uniknąć potencjalnych zagrożeń i korzystać z zalet najnowszych funkcji tego języka programowania.

<p>Loading...</p>