Подтвердить что ты не робот

Просят ли дважды давать плохую работу?

Пример 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 быть быстрее/лучше, или это не имеет значения?

4b9b3361

Ответ 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();

либо эхо-строка, либо ничего.