Je sais que c'est un vieux sujet mais quand même. Je viens de rencontrer le problème dans le code que je débogue au travail et peut-être que quelqu'un peut avoir un problème similaire ...
Disons que le code ressemble à ceci:
$positions = $this->positions() || [];
Vous vous attendez (comme vous en avez l'habitude par exemple avec javascript) que lorsque $ this-> positions () retourne false ou null, $ positions est un tableau vide. Mais ce n'est pas le cas. La valeur est TRUE ou FALSE dépend de ce que renvoie $ this-> positions ().
Si vous avez besoin d'obtenir la valeur de $ this-> positions () ou un tableau vide, vous devez utiliser:
$positions = $this->positions() or [];
ÉDITER:
L'exemple ci - dessus ne fonctionne pas comme prévu , mais la vérité est que , ||
et or
n'est pas la même chose ... Essayez ceci:
<?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";
Voici le résultat:
bool(false)
NULL
array(0) {
}
Donc, en fait, la troisième option ?:
est la bonne solution lorsque vous souhaitez définir une valeur renvoyée ou un tableau vide.
$positions = $this->positions() ?: [];
Testé avec PHP 7.2.1
$e = true || $x = 'foo'
ne définira pas en$x
raison d'un court-circuit, pas en raison d'une priorité plus élevée.