PHP / Magento Dev Blog

  • Publikacje
  • O autorze
  • Kontakt

PHP 7.3 – JSON_THROW_ON_ERROR, flexible Heredoc, array_key_first/last

by Henryk Tews / Tuesday, 08 January 2019 / Published in PHP

PHP 7.3 was officially released in December 2018. Not a revolution, but a few changes have a real impact on everyday code – especially working with JSON, more flexible Heredoc syntax, and a handful of new array functions.

json_decode() with exceptions instead of silent failures

Before PHP 7.3, malformed JSON simply returned null – no exception, no error. You always had to check json_last_error(). PHP 7.3 adds JSON_THROW_ON_ERROR:

// PHP 7.3 - exception on parse error
try {
    $data = json_decode('{"broken: json}', true, 512, JSON_THROW_ON_ERROR);
} catch (\JsonException $e) {
    echo $e->getMessage(); // Syntax error
}

// Works with json_encode() too
try {
    $encoded = json_encode(['key' => "±1"], JSON_THROW_ON_ERROR);
} catch (\JsonException $e) {
    echo $e->getMessage(); // Malformed UTF-8 characters
}

Flexible Heredoc and Nowdoc

Before PHP 7.3 the closing marker had to be at column zero. PHP 7.3 allows indentation:

// PHP 7.3 - closing marker can be indented
function buildQuery(): string
{
    return <<<SQL
        SELECT *
        FROM orders
        WHERE status = 'pending'
        SQL;
}

array_key_first() and array_key_last()

$data = ['apple' => 1, 'banana' => 2, 'cherry' => 3];

// PHP 7.3 - direct
$firstKey = array_key_first($data); // 'apple'
$lastKey  = array_key_last($data);  // 'cherry'

is_countable() – end of warnings on PHP 7.2

function countItems($items): int
{
    if (!is_countable($items)) {
        return 0;
    }
    return count($items);
}

Summary

JSON_THROW_ON_ERROR is a change worth adopting immediately – it eliminates an entire class of silent failures when working with APIs. Flexible Heredoc is useful for long SQL queries or XML templates in Magento modules.

About Henryk Tews

What you can read next

PHP 7.2 – object type hint, sodium instead of mcrypt, deprecations

© 2026 Created by

TOP
Zarządzaj zgodą
Aby zapewnić jak najlepsze wrażenia, korzystamy z technologii, takich jak pliki cookie, do przechowywania i/lub uzyskiwania dostępu do informacji o urządzeniu. Zgoda na te technologie pozwoli nam przetwarzać dane, takie jak zachowanie podczas przeglądania lub unikalne identyfikatory na tej stronie. Brak wyrażenia zgody lub wycofanie zgody może niekorzystnie wpłynąć na niektóre cechy i funkcje.
Funkcjonalne Always active
Przechowywanie lub dostęp do danych technicznych jest ściśle konieczny do uzasadnionego celu umożliwienia korzystania z konkretnej usługi wyraźnie żądanej przez subskrybenta lub użytkownika, lub wyłącznie w celu przeprowadzenia transmisji komunikatu przez sieć łączności elektronicznej.
Preferencje
Przechowywanie lub dostęp techniczny jest niezbędny do uzasadnionego celu przechowywania preferencji, o które nie prosi subskrybent lub użytkownik.
Statystyka
Przechowywanie techniczne lub dostęp, który jest używany wyłącznie do celów statystycznych. Przechowywanie techniczne lub dostęp, który jest używany wyłącznie do anonimowych celów statystycznych. Bez wezwania do sądu, dobrowolnego podporządkowania się dostawcy usług internetowych lub dodatkowych zapisów od strony trzeciej, informacje przechowywane lub pobierane wyłącznie w tym celu zwykle nie mogą być wykorzystywane do identyfikacji użytkownika.
Marketing
Przechowywanie lub dostęp techniczny jest wymagany do tworzenia profili użytkowników w celu wysyłania reklam lub śledzenia użytkownika na stronie internetowej lub na kilku stronach internetowych w podobnych celach marketingowych.
  • Manage options
  • Manage services
  • Manage {vendor_count} vendors
  • Read more about these purposes
Zobacz preferencje
  • {title}
  • {title}
  • {title}