PHP 7.3 wyszło oficjalnie w grudniu 2018. Nie jest to rewolucja, ale kilka zmian realnie wpływa na codzienny kod – szczególnie praca z JSON-em, elastyczniejsza składnia Heredoc i kilka nowych funkcji tablicowych. Przeglądam to, co faktycznie przyda się w projekcie.
json_decode() z wyjątkami zamiast cichych błędów
To zdecydowanie najważniejsza zmiana dla każdego, kto przetwarza dane z zewnętrznych API. Przed PHP 7.3 błędny JSON po prostu zwracał null – żaden wyjątek, żaden błąd, cisza. Trzeba było zawsze sprawdzać json_last_error():
// Przed PHP 7.3 – cichy błąd
$data = json_decode('{"broken: json}', true);
// $data = null, ale skąd wiesz dlaczego?
if (json_last_error() !== JSON_ERROR_NONE) {
throw new \RuntimeException('JSON error: ' . json_last_error_msg());
}
PHP 7.3 dodaje flagę JSON_THROW_ON_ERROR, która zmienia to zachowanie:
// PHP 7.3 – wyjątek przy błędzie parsowania
try {
$data = json_decode('{"broken: json}', true, 512, JSON_THROW_ON_ERROR);
} catch (\JsonException $e) {
// Masz dokładny komunikat błędu i stack trace
echo $e->getMessage(); // Syntax error
}
// Działa też przy json_encode()
try {
$encoded = json_encode(['key' => "\xB1\x31"], JSON_THROW_ON_ERROR);
} catch (\JsonException $e) {
echo $e->getMessage(); // Malformed UTF-8 characters
}
Jeśli masz moduły Magento integrujące się z zewnętrznymi API przez REST – warto przejść na JSON_THROW_ON_ERROR i zastąpić manualne sprawdzanie json_last_error().
Elastyczny Heredoc i Nowdoc
Przed PHP 7.3 zamykający znacznik Heredoc musiał stać na początku linii – zero wcięcia, inaczej błąd parsowania. To powodowało, że Heredoc wyglądał brzydko w zagnieżdżonych strukturach:
// Przed PHP 7.3 – zamknięcie musi być w kolumnie 0
function buildQuery(): string
{
return <<
PHP 7.3 pozwala na wcięcie zamykającego znacznika – i odpowiednio przycina wcięcie z całej zawartości:
// PHP 7.3 – czytelniejsze, wcięcie jest spójne z kodem
function buildQuery(): string
{
return <<
array_key_first() i array_key_last()
Drobna, ale długo wyczekiwana zmiana. Wcześniej pobranie pierwszego lub ostatniego klucza tablicy asocjacyjnej wymagało gimnastyki:
$data = ['apple' => 1, 'banana' => 2, 'cherry' => 3];
// Przed PHP 7.3 – nieczytelne
$firstKey = array_keys($data)[0]; // tworzy całą tablicę kluczy
$lastKey = array_keys($data)[count($data) - 1];
// Albo jeszcze gorsze kombinacje z reset()/end()
reset($data);
$firstKey = key($data);
// PHP 7.3 – wprost
$firstKey = array_key_first($data); // 'apple'
$lastKey = array_key_last($data); // 'cherry'
is_countable() – koniec z ostrzeżeniami na PHP 7.2
PHP 7.2 zaczął rzucać ostrzeżenia przy wywołaniu count() na wartościach niecountable (np. null lub string). PHP 7.3 dodaje is_countable(), żebyś mógł to sprawdzić wcześniej:
function countItems($items): int
{
if (!is_countable($items)) {
return 0;
}
return count($items);
}
countItems(null); // 0, bez ostrzeżenia
countItems([1, 2]); // 2
Podsumowanie
PHP 7.3 to zestaw dopracowań i małych usprawnień. JSON_THROW_ON_ERROR to zmiana, którą warto wdrożyć od razu – eliminuje całą klasę cichych błędów przy pracy z API. Elastyczny Heredoc przyda się przy długich zapytaniach SQL lub szablonach XML w modułach Magento.
