Menu

PHP Null Birleştirme Operatörü: ?? ve ??=

PHP null birleştirme operatörü, null veya atanmamış olmadıkça sol tarafını döndürür: $name = $_GET['name'] ?? 'Guest';. Eksik bir değişken veya dizi anahtarı için asla uyarı vermez. ?? zincirleri, ??= ataması, ?? ile ?: farkı ve nullsafe operatörü ?->.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

??, solundaki değer varsa ve null değilse onu, değilse sağındaki değeri döndürür: $name = $_GET['name'] ?? 'Guest';. Anahtarı doğrudan okumanın aksine, değişken veya dizi anahtarı eksik olduğunda asla uyarı vermez.

İlk çalıştırmada sorgu dizesi yoktur, bu yüzden iki varsayılan da kullanılır. Page sekmesindeki bir bağlantıya tıklayın; betik $_GET dolu olarak yeniden çalışır. O ilk çalıştırmada $_GET["name"] değerini ?? olmadan okumak, normal bir PHP kurulumunda Warning: Undefined array key "name" yazdırırdı. İstek verileri hakkında daha fazlası GETve_GET ve _POST sayfasında.

?? kısa bir isset() kontrolüdür

$a ?? $b tam olarak isset($a) ? $a : $b demektir. Değişkenlerde, her derinlikteki dizi anahtarlarında ve nesne özelliklerinde çalışır ve ilk eksik parçada şikâyet etmeden durur.

Kontrol, isset fonksiyonunun yaptığıyla aynıdır; bu yüzden null değeriyle var olan bir anahtar da varsayılanı alır.

Birkaç kaynağı denemek için ?? zincirlemek

?? sağdan birleşimlidir ve istediğiniz kadar zincirleyebilirsiniz. PHP atanmış ve null olmayan ilk işleneni döndürür.

??= yalnızca null olduğunda atar

$a ??= $b, $b değerini $a içine yalnızca $a atanmamış veya null olduğunda saklar. Varsayılanları doldurmanın ya da bir şeyi bir kez hesaplayıp yeniden kullanmanın en kısa yoludur.

??= operatörünün sağ tarafı yalnızca atama gerçekleştiğinde değerlendirilir; computing 4 ifadesinin bir kez görünmesinin nedeni budur.

?? ile ?: (kısa ternary)

?? null için test eder. ?: ise truthy olup olmadığını test eder. 0, "" ve "0" gibi değerlerde farklı yanıtlar verirler:

"0" miktarı gerçek bir girdidir: ?? onu korur, ?: onu değiştirir. Tek başına ?: eksik anahtar için uyarı verirdi; bloğun onu ($inputs[$key] ?? null) ?: ... biçiminde sarmasının nedeni budur. Ternary operatörü sayfası ?: operatörünün kendisini anlatır.

Nullsafe operatörü ?->

?->, aynı fikrin PHP 8'de eklenen nesne sürümüdür. Soldaki nesne null ise zincirin tamamı durur ve Call to a member function getAddress() on null gibi bir Error fırlatmak yerine null döndürür. Varsayılan için sona ?? koyun.

Kullanıcı 2 var ama adresi yok, kullanıcı 3 ise hiç yok. İkisi de hatasız olarak ?? "unknown" varsayılanına ulaşır.

Sık yapılan hata: ?? operatörünün önceliği düşüktür

??, . ve aritmetik operatörlerden daha gevşek bağlanır. Bu yüzden "Count: " . $count ?? 0 ifadesinde PHP önce asla null olmayan "Count: " . $count stringini oluşturur ve varsayılan hiç kullanılmaz.

?? ifadesi daha büyük bir ifadenin içinde yer aldığında onu her zaman parantez içine alın.

Sıkça Sorulan Sorular

PHP'de ?? ne anlama gelir?

?? null birleştirme operatörüdür. $a ?? $b, $a varsa ve null değilse $a, değilse $b döndürür. isset($a) ? $a : $b ifadesinin kısaltmasıdır ve $a veya bir dizi anahtarı tanımsız olduğunda uyarı vermez.

PHP'de ?? ile ?: arasındaki fark nedir?

?? yalnızca sol taraf null veya atanmamış olduğunda varsayılana döner, bu yüzden 0 ?? 5 sonucu 0, '' ?? 'x' sonucu '' olur. ?: ise sol taraf falsy olduğunda her zaman varsayılana döner, bu yüzden 0 ?: 5 sonucu 5 olur. Ayrıca ?: tanımsız değişkenler ve anahtarlar için uyarı verir, ?? vermez.

PHP'de ??= ne yapar?

$a ??= $b, $b değerini $a içine yalnızca $a null veya atanmamışsa atar; aksi hâlde $a olduğu gibi kalır. $a = $a ?? $b; ifadesinin kısaltmasıdır ve PHP 7.4'te eklenmiştir.

PHP'de nullsafe operatörü ?-> nedir?

$obj?->method() metodu yalnızca $obj null değilse çağırır; null ise zincirin tamamı hata fırlatmak yerine null döndürür. Varsayılan için ?? ile birleştirin: $user?->getAddress()?->city ?? 'unknown'. PHP 8.0'da eklenmiştir.

Coddy programlama dilleri çizimi

Coddy ile kodlamayı öğren

BAŞLA