Я постараюсь сохранить это простым. Я сделал 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;
Могут быть случаи, когда второй оператор никогда не выполняется, потому что первый всегда будет истинным, что делает бесполезным вызов второй функции.
Так какой из них более эффективен? Сохранение значения и риск того, что оно не будет использовано, или вызовите функцию дважды только при необходимости?
Ваша логика сводится к этому:
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 для выделения этого!)
Это замечательно, если у ваших функций нет побочных эффектов. Если вы полагаетесь на свою вторую функцию, чтобы получить какой-то другой эффект, кроме простого ответа на вопрос «истина / ложь», это не сработает для вас.
Вы можете видеть это работает Вот — попробуйте изменить возвращаемые значения функций и посмотрите, что произойдет при запуске.
Других решений пока нет …