Bunun eski bir konu olduğunu biliyorum ama yine de. İş yerinde hata ayıkladığım kodda sorunla yeni tanıştım ve belki birisinin benzer bir sorunu olabilir ...
Diyelim ki kod şuna benziyor:
$positions = $this->positions() || [];
$ This-> position () false veya null döndürdüğünde, (örneğin javascript'ten alışkın olduğunuz gibi), $ konumlarının boş dizi olmasını beklersiniz. Ama değil. Değer TRUE veya FALSE olup, $ this-> position () öğesinin döndürdüğüne bağlıdır.
$ This-> position () veya boş dizinin değerini almanız gerekiyorsa, şunu kullanmanız gerekir:
$positions = $this->positions() or [];
DÜZENLE:
Yukarıdaki örnek amaçlandığı gibi değil çalışır ama gerçek olduğunu ||
ve or
aynı değildir ... Bu deneyin:
<?php
function returnEmpty()
{
//return "string";
//return [1];
return null;
}
$first = returnEmpty() || [];
$second = returnEmpty() or [];
$third = returnEmpty() ?: [];
var_dump($first);
var_dump($second);
var_dump($third);
echo "\n";
Sonuç şu:
bool(false)
NULL
array(0) {
}
Dolayısıyla, ?:
döndürülen değeri veya boş diziyi ayarlamak istediğinizde aslında üçüncü seçenek doğru çözümdür.
$positions = $this->positions() ?: [];
PHP 7.2.1 ile test edildi
$e = true || $x = 'foo'
tanımlamayacaktır$x
.