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.