Saya tahu itu topik lama tapi tetap saja. Saya baru saja menemui masalah dalam kode yang saya debug di tempat kerja dan mungkin seseorang mungkin memiliki masalah serupa ...
Misalkan kodenya terlihat seperti ini:
$positions = $this->positions() || [];
Anda akan mengharapkan (seperti yang biasa Anda gunakan dari mis. Javascript) bahwa ketika $ this-> position () mengembalikan false atau null, $ position adalah array kosong. Tapi ternyata tidak. Nilainya TRUE atau FALSE tergantung pada apa yang dikembalikan $ this-> position ().
Jika Anda perlu mendapatkan nilai $ this-> position () atau array kosong, Anda harus menggunakan:
$positions = $this->positions() or [];
EDIT:
Contoh di atas tidak berfungsi sebagaimana mestinya tetapi kenyataannya itu ||
dan or
tidak sama ... Coba ini:
<?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";
Inilah hasilnya:
bool(false)
NULL
array(0) {
}
Jadi, sebenarnya opsi ketiga ?:
adalah solusi yang tepat ketika Anda ingin mengatur nilai yang dikembalikan atau array kosong.
$positions = $this->positions() ?: [];
Diuji dengan PHP 7.2.1
$e = true || $x = 'foo'
tidak akan ditentukan$x
karena korsleting, bukan karena prioritas yang lebih tinggi.