Просят ли дважды давать плохую работу?
Пример 1:
function getMilk() {
if($condition == true) return "Milk for you, madam";
else return false;
}
if(getMilk()) echo getMilk();
В первом примере PHP дважды запускается для молока?
Пример 2:
echo getMilk(); // don't check for milk first, just get it if they have it
Если бы я был PHP, я бы предпочел получить второй пример. Тогда мне не пришлось бы бежать в магазин, проверяя на молоко, а затем бегать еще раз, чтобы получить его.
Будет ли пример 2 быть быстрее/лучше, или это не имеет значения?
Ответы
Ответ 1
Да, вы вызываете функцию дважды. Избегайте этого (потому что функция может быть дорогой для вызова), выполнив одно из следующих действий:
$getMilk = getMilk();
if($getMilk) echo $getMilk;
Вы можете уменьшить это до одного формата (но нечитабельного):
if ($getMilk = getMilk()) echo $getMilk;
Вы также можете использовать встроенный if
тернар, с провалом:
echo getMilk()?:""; //Will echo the result of getMilk() if there is any or nothing.
Ответ 2
Да, PHP будет вызывать функции точно так же часто, как вы говорите. Функция будет выполнена дважды. Вы не должны этого делать, поскольку вы не знаете, насколько дорого какая-либо конкретная функция, и/или может измениться в будущем, если вы перепишите детали реализации функции. Особенно функции, которые имеют побочные эффекты (они что-то модифицируют, например, они пишут в файл) не должны вызываться чаще, чем необходимо.
Вместо этого сохраните результат функции в переменной:
$milk = getMilk();
if ($milk) {
echo $milk;
}
Это может быть даже привязано к:
if ($milk = getMilk()) {
echo $milk;
}
Ответ 3
Вопрос теоретический больше всего, так как разница в производительности будет незначительной.
Тем не менее, в вашем случае второй подход прекрасен, поскольку false
не переводит на какой-либо вывод. Так
echo getMilk();
либо эхо-строка, либо ничего.