Функция в функции.?

Всегда используйте то, что является самым ясным. Что-либо еще, что Вы делаете, пытается перехитрить компилятор. Если компилятор будет вообще интеллектуален, он приложит все усилия для оптимизации результата, но ничто не может заставить следующего парня не ненавидеть Вас за Ваше дрянное bitshifting решение (я люблю побитовую обработку между прочим, это интересно. Но забава! = читаемый)

Преждевременная оптимизация является корнем всего зла. Всегда помните три правила оптимизации!

  1. не оптимизируют.
  2. , Если Вы - эксперт, см. правило № 1
  3. , Если Вы - эксперт и можете выровнять по ширине потребность, затем используйте следующую процедуру:

    • Код неоптимизированный
    • определяет, как быстро "Достаточно быстро" - Примечание, какое требование пользователя / история требует той метрики.
    • Запись тест скорости
    • Тест существующий код - Если это достаточно быстро, Вы сделаны.
    • Перекод это оптимизировало
    • Тестовый оптимизированный код. ЕСЛИ это не встречает метрику, выбрасывает его и сохраняет оригинал.
    • , Если это встречает тест, удержите исходный код как комментарии

кроме того, делая вещи как удаление внутренних циклов, когда они не требуются, или предпочитание связанного списка по массиву для вида вставки не оптимизация, просто программируя.

65
задан Charles 9 February 2014 в 18:32
поделиться

4 ответа

X returns (value +3), while Y returns (value*2)

Given a value of 4, this means (4+3) * (4*2) = 7 * 8 = 56.

Although functions are not limited in scope (which means that you can safely 'nest' function definitions), this particular example is prone to errors:

1) You can't call y() before calling x(), because function y() won't actually be defined until x() has executed once.

2) Calling x() twice will cause PHP to redeclare function y(), leading to a fatal error:

Fatal error: Cannot redeclare y()

The solution to both would be to split the code, so that both functions are declared independent of each other:

function x ($y) 
{
  return($y+3);
}

function y ($z)
{
  return ($z*2);
}

This is also a lot more readable.

93
ответ дан 24 November 2019 в 15:19
поделиться
(4+3)*(4*2) == 56

Обратите внимание, что PHP на самом деле не поддерживает «вложенные функции», как это определено только в области родительской функции. Все функции определены глобально. См. документы .

28
ответ дан 24 November 2019 в 15:19
поделиться

Не уверен, чего хотел добиться автор этого кода. Определение функции внутри другой функции НЕ означает, что внутренняя функция видна только внутри внешней функции. После первого вызова x () функция y () также будет в глобальной области видимости.

16
ответ дан 24 November 2019 в 15:19
поделиться

Your query is doing 7 * 8

x(4) = 4+3 = 7 and y(4) = 4*2 = 8

what happens is when function x is called it creates function y, it does not run it.

3
ответ дан 24 November 2019 в 15:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: