¿Usando el retorno de la función booleana o configurando el retorno a una variable?

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.

preguntado el 10 de septiembre de 12 a las 22:09

Pasará por la función nuevamente (a menos que tenga el almacenamiento en caché en su lugar). -

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ó. -

¡gracias chicos! ¡Estoy explorando el funcionamiento interno de php! -

2 Respuestas

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

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 or haz tu propia pregunta.