In alcune lingue, si può fareEsiste un cortocircuito OR in PHP che restituisce il valore più a sinistra?
$a = $b OR $c OR die("no value");
Cioè, l'OR sarà corto circuito, solo valutando i valori da sinistra a destra finché non trova un vero valore. Inoltre, restituisce il valore effettivo che è stato valutato, al contrario di solo true
.
Nell'esempio precedente, in PHP, $a
sarà il valore 1
se uno o $a
$b
sono valori non-false, o sarà die
.
Così ha scritto una funzione first
, da utilizzare come
$a = first($a, $b, die("no value"));
che restituisce il valore di di una $a
o $b
. Ma, non cortocircuitare, sarà sempre die
.
C'è un cortocircuito OR
in PHP che restituisce il valore effettivo?
Edit: Alcune buone risposte per l'esempio che ho dato, ma credo che il mio esempio non è esattamente quello che volevo dire. Permettimi di chiarire.
$a = func1() OR func2() OR func3();
Dove ciascuna di queste funzioni fa un davvero intenso calcolo, quindi voglio solo per valutare ogni espressione una volta al massimo. E per il primo a restituire un valore vero, voglio che il valore attuale sia memorizzato in $a
.
Penso che si possa escludere la scrittura di una funzione, perché non cortocircuiterà. E la risposta dell'operatore condizionale valuterà ciascuna espressione due volte.
Questo, ovviamente, morirà sempre. Quando chiami una funzione, PHP deve prima valutare tutti i parametri. Durante la valutazione, vede 'die ("nessun valore")' e fa proprio questo. – Tom
Valutare ogni espressione due volte andava bene quando parlavamo di variabili. Devi spiegare la tua domanda la prima volta e non criticare una risposta dopo aver presentato informazioni aggiuntive che non erano disponibili la prima volta. Se intendevi le funzioni, usa le funzioni la prima volta. La migliore risposta è ora il "no" del caos. –
il commento n. 2 è errato. php ha una valutazione di cortocircuito ma AFAIK non restituisce la valle più a sinistra. Restituisce sempre un booleano. – apinstein