Null birleştirici atama nedir ?? = PHP 7.4 operatörü


11

Yakında çıkacak PHP 7.4 özellikleri hakkında bir video gördüm ve bu ??=yeni operatörü gördüm . ??Operatörü zaten tanıyorum . Bu nasıl farklı?

Yanıtlar:


11

Gönderen docs :

Eşitlik eşit veya ?? = operatörü bir atama operatörüdür. Left parametresi null ise, sağ parametrenin değerini sol parametreye atar. Değer null değilse, hiçbir şey yapılmaz.

Misal:

// 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';

Bu nedenle, daha önce atanmamışsa, bir değer atamak temel olarak basittir.


4
Ayrıca resmi dokümanlarda bir yazım hatası bulduk gibi görünüyor. The folloving lines...
Pavel Lint

2 çizginin "aynı" yaptığı% 100 kesin değildir, ikinci durumda sol taraf sadece bir kez değerlendirilir, bu yüzden daha verimlidir
the_nuts

8

In PHP 7 bu aslında bir geliştirici bir üçlü operatörü ile kombine bir isset () çeki basitleştirmek için izin serbest bırakıldı. Örneğin, PHP 7'den önce şu kodu alabiliriz:

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

Ne zaman PHP 7 serbest bırakıldı, bunun yerine bu yazma yeteneği var:

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

Ancak, PHP 7.4 yayınlandığında, bu daha da basitleştirilebilir:

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

Bunun işe yaramadığı durumlardan biri, farklı bir değişkene değer atamak istiyorsanız, bu nedenle bu yeni seçeneği kullanamazsınız. Bu nedenle, bu memnuniyetle karşılanırken birkaç sınırlı kullanım durumu olabilir.


4

Boş birleştirme atama operatörü, boş birleştirme operatörünün sonucunu atamanın kısa bir yoludur.

Resmi sürüm notlarından bir örnek :

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

1

Örnek Dokümanlar :

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

1

Boş birleştirme atama operatörü zinciri:

$a = null;
$b = null;
$c = 'c';

$a ??= $b ??= $c;

print $b; // c
print $a; // c

3v4l.org'da örnek

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.