PHP 7.3: A Look at JSON Error Handling

Muhamad Jalaludin 17 Juli 2018

PHP 7.3: A Look at JSON Error Handling

PHP Hypertext Preprocessor (PHP) adalah bahasa pemrograman yang memungkinkan pengembang web untuk membuat konten dinamis yang berinteraksi dengan basis data. PHP pada dasarnya digunakan untuk mengembangkan aplikasi perangkat lunak berbasis web.

Seiring berkembangnya PHP, terdapat banyak perubahan mulai dari versi 1.0 hingga sekarang ini yang sudah mencapai versi 7.3.0. Salah satu fitur baru yang datang pada PHP 7.3 adalah error handling (Penanganan Masalah) yang lebih baik untuk json_encode() dan json_decode(). Mari kita lihat bagaimana cara menangani kesalahan JSON di <= PHP 7.2, dan peningkatan baru yang ada di PHP 7.3.

Background

Pada PHP v7.2, jika kamu ingin menentukan apakah JSON tidak valid, kamu harus menggunakan fungsi json_last_error() untuk memverifikasi-nya

>>> json_decode("{");
=> null
>>> json_last_error();
=> 4
>>> json_last_error() === JSON_ERROR_NONE
=> false
>>> json_last_error_msg()
=> "Syntax error"

Misalnya, pada class Laravel Illuminate\Encryption\Encrypter disini merupakan sebuah pemeriksaan untuk memastikan bahwa panggilan json_encode() tidak melakukan kesalahan

// Once we get the encrypted value we'll go ahead and base64_encode the input
// vector and create the MAC for the encrypted value so we can then verify
// its authenticity. Then, we'll JSON the data into the "payload" array.
$json = json_encode(compact('iv', 'value', 'mac'));

if (json_last_error() !== JSON_ERROR_NONE) {
    throw new EncryptException('Could not encrypt the data.');
}

return base64_encode($json);

Setidaknya kita dapat menentukan apakah JSON encoding/decoding memiliki kesalahan, tetapi sedikit kikuk jika dibandingkan dengan throwing an exception (melempar kesalahan) yang mengemas kode kesalahan dan pesan secara rapi.

Meskipun Kamu harus ikut serta, PHP v7.3 memiliki cara luar biasa untuk memungkinkan Anda untuk menangkap (catch) dan menangani (handle) JSON Exception — mari kita periksa new flag yang dapat kita gunakan!

The Throw on Error Flag in PHP 7.3

Dengan pilihan baru flag JSON_THROW_ON_ERROR, Kamu dapat menulis ulang blok kode ini dengan try/catch. Mungkin beberapa hal seperti berikut :

use JsonException;

try {
    $json = json_encode(compact('iv', 'value', 'mac'), JSON_THROW_ON_ERROR);
    return base64_encode($json);
} catch (JsonException $e) {
    throw new EncryptException('Could not encrypt the data.', 0, $e);
}

Saya pikir gaya baru ini sangat berguna untuk userland code ketika Kamu menerima beberapa data JSON dan bukannya mencari-cari json_last_error() dan flag yang cocok. JSON encoding/decoding dapat mengambil keuntungan dari handler kesalahan.

Fungsi json_decode() memiliki beberapa argumen lagi, dan akan terlihat seperti hal-hal berikut di PHP 7.3 jika kamu ingin memanfaatkan penanganan kesalahan

use JsonException;

try {
    return json_decode($jsonString, $assoc = true, $depth = 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
    // Handle the JSON Exception
}

// Or even just let it bubble up...

/** 
 * Decode a JSON string into an array
 *
 * @return array
 * @throws JsonException
 */
function decode($jsonString) {
    return json_decode($jsonString, $assoc = true, $depth = 512, JSON_THROW_ON_ERROR);
}

Getting the Error Code and Message

Sebelumnya Kamu bisa mengambil kode kesalahan JSON dan pesan menggunakan fungsi-fungsi berikut:

// Error code
json_last_error();

// Human-friendly message
json_last_error_msg();

Jika Anda menggunakan flag JSON_THROW_ON_ERROR yang baru, berikut ini cara Anda mendapatkan kode dan pesan:

try {
    return json_decode($jsonString, $assoc = true, $depth = 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
    $e->getMessage(); // like json_last_error_msg()
    $e->getCode(); // like json_last_error()
}

Lihat base Exception class untuk lebih banyak mengenai detail API, pengecualian JsonException_ merupakan subclass dari Exception.

JSON Default Behavior in PHP 7.3

Ketika meningkatkan ke PHP 7.3, kode Anda akan kompatibel ke belakang pada hari pertama dan terus berfungsi seperti yang diharapkan.

Perilaku default dari json_encode()|decode() PHP tidak berubah, the throw on error RFC menambahkan opsi baru dan exception class.

Penutup

Mungkin itu tadi salah satu fitur baru yang terdapat pada PHP v7.3 yaitu penanganan error menggunakan JSON_THROW_ON_ERROR. Tunggu postingan-postingan selanjutnya pada website CodePolitan, so stay tune in CodePolitan, see you in the next article :D

Sumber Referensi