Apa yang dimaksud dengan null coalescing assignment ?? = operator di PHP 7.4

10

Saya baru saja melihat video tentang fitur-fitur PHP 7.4 mendatang dan melihat ??=operator baru ini . Saya sudah tahu ??operatornya. Bagaimana ini berbeda?

emix
sumber

Jawaban:

10

Dari dokumen :

Coalesce equal atau ?? = operator adalah operator penugasan. Jika parameter kiri nol, berikan nilai parameter kanan ke parameter kiri. Jika nilainya tidak nol, tidak ada yang dilakukan.

Contoh:

// The folloving lines are doing the same
$this->request->data['comments']['user_id'] = $this->request->data['comments']['user_id'] ?? 'value';
// Instead of repeating variables with long names, the equal coalesce operator is used
$this->request->data['comments']['user_id'] ??= 'value';

Jadi pada dasarnya itu hanya singkatan untuk menetapkan nilai jika belum ditetapkan sebelumnya.

Pavel Lint
sumber
4
Sepertinya kami menemukan kesalahan ketik pada dokumen resmi. The folloving lines...
Pavel Lint
itu tidak 100% tepat bahwa 2 baris melakukan "sama", dalam kasus kedua sisi kiri hanya dievaluasi sekali, sehingga lebih efisien
the_nuts
7

Dalam PHP 7 ini awalnya dirilis, memungkinkan pengembang untuk menyederhanakan cek isset () dikombinasikan dengan operator ternary. Misalnya, sebelum PHP 7, kita mungkin memiliki kode ini:

$data['username'] = (isset($data['username']) ? $data['username'] : 'guest');

Ketika PHP 7 dirilis, kami mendapatkan kemampuan untuk menulis ini sebagai:

$data['username'] = $data['username'] ?? 'guest';

Sekarang, bagaimanapun, ketika PHP 7.4 dirilis, ini dapat disederhanakan lebih jauh ke:

$data['username'] ??= 'guest';

Satu kasus di mana ini tidak berhasil adalah jika Anda ingin menetapkan nilai ke variabel yang berbeda, sehingga Anda tidak akan dapat menggunakan opsi baru ini. Dengan demikian, sementara ini disambut mungkin ada beberapa kasus penggunaan terbatas.

Ramki
sumber
4

Operator penugasan nol adalah cara singkat menetapkan hasil dari operator penggabungan nol.

Contoh dari catatan rilis resmi :

$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}
Nicholas Betsworth
sumber
1

Contoh Dokumen :

$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}
Dmitry
sumber