¿Usando el retorno de la función booleana o configurando el retorno a una variable?
Frecuentes
Visto 78 veces
3
Me preguntaba si es más eficiente establecer una función return
a una variable, ya que si fuera a usarla en argumentos, ¿no tendrían que volver a pasar por la función?
Por ejemplo:
function check() {
foreach() {
// insert long foreach loop here
return true;
}
}
if(check() == 1 || check() === true) {
// had to go through the function twice?
}
$check = check();
if($check == 1 || $check === true) {
// only has to go through the function once
}
Me preguntaba si PHP de alguna manera guardó los resultados de la primera ejecución de la función o si pasa por la función cada vez (lo que parece ineficiente si los argumentos son los mismos; en este caso, ninguno).
Si alguien quiere sugerir un título mejor o editarlo, adelante.
2 Respuestas
5
Pasa cada vez. Guárdelo en una variable de antemano, como en su segundo ejemplo.
Respondido el 10 de Septiembre de 12 a las 22:09
¡Gracias! Me sorprende que el valor no se guarde en la primera ejecución, pensé que php habría sido más eficiente - usuario1631995
Eso depende del programador :) - logan serman
La razón por la que PHP no optimiza esto es que el método podría tener efectos secundarios. El almacenamiento en caché del resultado de la llamada al método podría romper el programa. La detección de efectos secundarios es posible, pero difícil. - Juan Kurlak
0
if(check() == 1 || check() == true) {
es redundante... una simple verificación de igualdad (==
) trata un booleano 'verdadero' como 1
de todos modos. Si va a devolver valores mixtos (int + booleanos), debe usar la verificación de igualdad estricta:
if (check() == 1 || check() === true)
^^^
En este caso, no es necesario, pero considere el caso en el que una función puede devolver legítimamente un 0
valor, así como un falso booleano para indicar falla. Por simples pruebas de igualdad, 0 == false
es verdad. pero 0 === false
Es falso.
Respondido el 10 de Septiembre de 12 a las 22:09
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php or haz tu propia pregunta.
Pasará por la función nuevamente (a menos que tenga el almacenamiento en caché en su lugar). - PeeHaa
Si desea configurar el resultado de la función para que se use en varios lugares dentro del alcance, entonces es mejor asignarlo a una variable, según las razones que ya resaltó. - MazB
¡gracias chicos! ¡Estoy explorando el funcionamiento interno de php! - user1631995