Il mio obiettivo è mettere una logica complessa in una dichiarazione if(). Diciamo che ho una matrice di valori e ho intenzione di eseguire un po 'di codice se tutto nel mio array è diverso da zero. Normalmente, potrei dire, $valid = true
, foreach
il mio array e impostare $valid = false
quando viene trovato uno zero. Quindi eseguirò il mio codice if ($valid)
. In alternativa, potrei inserire il mio loop in una funzione e inserire la funzione nel mio if()
.Cosa restituiscono le chiusure PHP nelle istruzioni IF?
Ma io sono pigro, quindi preferirei non muck con un gruppo di bandiere "valide", e preferirei non scrivere una funzione completamente nuova che viene utilizzata solo in un posto.
Quindi diciamo che ho questo:
if ($q = function() { return 'foo'; }) {
echo $q;
}
else {
echo 'false';
}
mi aspettavo che il if
ottiene 'foo'
, che restituisce true. La mia chiusura è impegnata a $q
e l'istruzione viene eseguita. $q
restituisce la stringa foo
e "foo" viene stampato.
Invece, viene visualizzato l'errore Object of class Closure could not be converted to string
.
Quindi proviamo questo, invece:
if (function() { return false; }) {
echo 'foo';
}
else {
echo 'true';
}
mi aspettavo che la mia funzione sarebbe tornato falso e 'vero' sarebbe da stampare. Invece, viene stampato 'foo'.
Cosa c'è di sbagliato nel modo in cui sto andando a riguardo? Sembra che stia dicendo "Sì, quella è sicuramente una funzione!" invece di "No, perché la funzione è stata valutata su false". C'è un modo per fare ciò che sto cercando di fare?
Lei sembra confondere le funzioni con i loro valori di ritorno. – delnan
Suppongo che quello che volevo fosse più vicino a 'if (function() {return false;}()) {' che è apparentemente valido in Javascript ma non in PHP. – ajp5103
http://stackoverflow.com/questions/3568410/anonymous-functions-that-execute-immediately call_user_func() è quello che stavo cercando. – ajp5103