В чём смысл проверки наличия функции перед её объявлением?

Вероломство

Читаю код один, идёт подключение файла functions.php и в нём следующее содержание:

PHP:
  1. <?php
  2.  
  3. if (!function_exists(‘a’)) {
  4.     function a()
  5.     {
  6.         # code
  7.     }
  8. }
  9.  
  10. if (!function_exists(‘b’)) {
  11.     function b()
  12.     {
  13.         # code
  14.     }
  15. }
  16.  
  17. if (!function_exists(‘c’)) {
  18.     function c()
  19.     {
  20.         # code
  21.     }
  22. }

Ну и какой смысл такой гениальной проверки? :)

 

Drunkenmunky

Например чтобы обеспечить совместимость кода с архивными версиями PHP добавлением самописных аналогов.
Широко применялось при переходе с PHP4 на PHP5.
Сейчас реже.

 

amberson

Защита от повторных инклюдов файла.

 

Dimon2x

Что бы не покупать продукты, которые уже есть в холодильнике, нужно в него заглянуть.

 

Вероломство

require_once ‘functions.php’;

дальше что
— Добавлено —

и пользовательская функция не будет определена при наличии функции с таким именем

а вот если без проверки будет то пых нам выбросит мессагу что мы пытаемся переопределить функцию и мы тогда сможем исправить косяк

правильно?

 

Dimon2x

Cannot redeclare
— Добавлено —
Даже если отключить все ошибки.
— Добавлено —
Пространства имён, могут здесь помочь.

 

Вероломство

какие пространства имён, у нас файл с функциями подключается

в чём смысл проверки перед объявлением? чтобы если уже есть такое имя у какой-то функции, то не предложить поискать другое и пользователь бы не смог своей функцией воспользоваться, в которую свой нужный ему функционал заложил?

или это потому что мы бредим при создании фреймворка и проверка наличия функции делает его якобы круче, а за лишние строки кода можно потребовать доплату? :)

https://github.com/laravel/framework/blob/8.x/src/Illuminate/Collections/helpers.php

 

Satger

Не знаю, в чём там, но у меня была ситуация, когда require_once неудобно.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *