Какой способ более эффективен?

Я постараюсь сохранить это простым. Я сделал twp-функции, которые что-то тестируют:

//user valid
function validusr(){
return true;//or false, depends
}
//user in db
function indbusr(){
return true;//or false, depends
}

Позже у меня есть это

    if ( !validusr( $myval ) ) return validusr( $myval );
else if ( !indbusr( $myval ) ) return indbusr( $myval );
else return true;

Тем не менее, это не очень хорошо, потому что я вызываю функцию 2 раза: один раз для проверки $myvalи однажды, когда я верну его. Но, если я скажу, сохраните значение следующим образом:

$result1=validusr($myval);
$result2=indbusr($myval);

if  (!$result1)  return $result1;
else if ( !$result2) return $result2;
else return true;

Могут быть случаи, когда второй оператор никогда не выполняется, потому что первый всегда будет истинным, что делает бесполезным вызов второй функции.

Так какой из них более эффективен? Сохранение значения и риск того, что оно не будет использовано, или вызовите функцию дважды только при необходимости?

-1

Решение

Ваша логика сводится к этому:

If the user is valid AND in the database, return true, otherwise, return false;

Вы можете воспользоваться внутренним оптимизатором PHP, чтобы определить, какие функции вызывать. Используя это:

return (validusr($myval) && indbusr($myval));

PHP выполнит первую функцию и посмотрит в будущее на выражение. Если функция возвращает true он перейдет к следующей функции. Если он вернется false выражение будет false что бы ни возвращала следующая функция, чтобы PHP не стал ее вызывать и возвращать false немедленно.

Аналогично, PHP оптимизирует выражения OR ( $a || $b ||someFunction($c)возвращая true как только он встречает true значение в последовательности. (Благодаря dognose для выделения этого!)

Это замечательно, если у ваших функций нет побочных эффектов. Если вы полагаетесь на свою вторую функцию, чтобы получить какой-то другой эффект, кроме простого ответа на вопрос «истина / ложь», это не сработает для вас.

Вы можете видеть это работает Вот — попробуйте изменить возвращаемые значения функций и посмотрите, что произойдет при запуске.

6

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector