PHP Pure функции

Я пытаюсь определить чистые функции в коде PHP.

Чистая функция - это та, в которой выполняются оба этих утверждения о функции:

  • Функция всегда оценивает одно и то же значение результата, учитывая одно и то же значение аргумента. Значение результата функции не может зависеть от какой-либо скрытой информации или состояния, которое может изменяться по мере выполнения программы или между различными выполнениями программы, а также не может зависеть от какого-либо внешнего ввода от устройств ввода-вывода.
  • Оценка результата не вызывает какого-либо семантически наблюдаемого побочного эффекта или вывода, такого как мутация изменяемых объектов или вывод на устройства ввода-вывода.

(определение из Википедии)

Достаточно ли сказать, что функция PHP чиста тогда и только тогда, когда

  • все его аргументы передаются по значению (нет & в списке аргументов)
  • он не использует члены объекта (нет $this в теле функции)
  • он не использует глобалы (он не содержит global в теле функции)
  • это не использует суперглобальные (это не содержит $_ переменные)

Верны ли эти утверждения? Я пропускаю какие-либо варианты использования?

1 ответ

Вы упускаете много вариантов использования

  • rand()
  • взаимодействие с базой данных
  • файловый ввод-вывод
  • staticпеременные
  • вызовы других функций с global
  • import/ requireоператоры внутри функций
  • функции с внутренним состоянием, например ob_get_contents()
  • изменение указателей массива

Наверное, есть много вещей, о которых я не думаю. PHP имеет очень стабильный дизайн.

Другие вопросы по тегам