- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Sitealert, как это ТС сделал? :)
Смотрите, например я рассчитываю, что моя функция
может быть переопределена. Ну например вдруг пользователь захочет ее модернизировать, если он полезет в код плагина и там отредактирует, то после моего очередного коммита и обновления он просто потеряет свой код (читай работу). Как быть? Вот тут и может быть полезен function_exists. Пример:
Но я это сделал. потому что предпологал возможность переопределения.
Gerga, функцию в глобальном пространстве невозможно переопределить. Вернее можно, но с помощью специальной функции, а не просто так - написал и готово.
PS. Вот она (но как-то не очень её рекомендуют использовать)
http://php.net/manual/ru/function.runkit-function-redefine.php
Sitealert, вы не улавливаете суть или улавливаете, но не принимаете почему-то.
Sitealert, вы не улавливаете суть или улавливаете, но не принимаете почему-то.
По сути, феншуйно было бы делать проверку на существование функции, и в случае положительного ответа выводить окошко с надписью "Разберитесь с вашей долбаной функцией!".
Отсюда мораль, переходите на объектное программирование )))
Проверка на объявление функции это скорее защита от ошибки, ибо если два раза дернуть один и тот же файл инклудом, то получим фатальную ошибку, что функция существует.
(а в ЦМС, вроде вордпресса иногда бывает так что дергается этот самый файл раз по 10)
Поэтому правила хорошего тона в написании библиотек, советуют оборачивать каждую функцию вот такой конструкцией.
И это не только вордпресса касается
в codeigniter, на котором в последнее время я только и пишу, все хелперы тоже написаны в таком стиле, так как вызвать хелпер можно из любого контроллера, модели или из автозагрузчика и чтобы постоянно не отслеживать код, сделано всё аналогичным образом.
безсмысленно делать вещи, которые не пригодятся.
Что бессмысленно, а точнее даже вредно - так это нести такую чушь, что ты тут нагородил.
Мало того, что такие обёртки - правила хорошего тона, так именно в дочерних темах это нужно делать. Т.к. переопределяются функции родителей.
Можно (!=нужно) не делать только в том случае, если сам именуешь функцию, со 100% уверенностью, что такое имя больше нигде не встретиться и никем больше функция не будет использоваться (переопределяться). Это явно не о именах типа "theme_social_links".
где не нужно повторное определение функции - это приведет к непонятному поведении,
1. Люди, для решения "непонятностей" ставят контрольные метки.
2. Это в ваших сапописьках может привести к чему угодно. Тут же речь не просто о ВП, а о функциях родительской темы.
3. Лучше пусть будут "непонятости", чем после таких советов завалится сайт на продакшене (а именно так поступают множество хомячков - правят файлы на продакшене. Причем зачастую без доступа к ФТП, а через редактор в ВП, при этом возмущаются когда им говоришь, что это риски).
Резюме: почти гарантированно ничего не случится, если не обернуть. Но а) всё же есть "почти" и б) нужно с самого начала формировать в себе привычки делать правильно.
silicoid, вы правы, function_exists отвечает на вопрос "Существует ли такая функция?", как пользоваться этой информарцией - проектное решение. Но я более чем уверен, что в коде ядра что фреймворков, что CMSок function_exists/class_exists не оборачивает каждую функцию/классс ради хорошего тона программирования или избежания повторного определения - это было бы глупо. Вы только представьте что было был, если бы это делалось. function_exists/class_exists должны оборачивать только те функции и классы для которых это нужно и точка. Если готоворит о WP, в файле wp-includes/pluggable.php можно увидитеь какие функции доступны для переопределения.
Как я использую function_exists в контексте WP:
1. Cвязка плагин - плагин. Отношение композиция. Плагин B вызывает функцию плагина A, тут нужна проверка на наличие вызываемой функции;
2. Связка тема - плагин. Отношение композиция. Тема вызывает функцию плагина, тут нужна проверка на наличие;
3. Связка родительская тема - дочерняя тема. Отношение наследование. Определенные функции родителя должны быть обвернуты function_exists , чтобы ребенок мог их переопределять.
так именно в дочерних темах это нужно делать.
Это делается в родительских темах.
---------- Добавлено 14.02.2019 в 09:43 ----------
3. Лучше пусть будут "непонятости",
корпоративное решение, где-то это уместимо, а где-то нет.
Это делается в родительских темах.
Это делается. Делается нормальными разработчиками. В темах в тч.
А "родительской" она становится только если у неё образуется дочка. Никто не отменял правило проверять существование функций хоть в дочках, хоть в плагинах, хоть где. Это есть такие правила качественного кодинга, как напр. писать <?php а не фигню "сокращённо" <?
---------- Добавлено 14.02.2019 в 10:48 ----------
Но я более чем уверен, что в коде ядра что фреймворков, что CMSок function_exists/class_exists не оборачивает каждыю функцию/классс ради хорошего тона программирования
Каждую - нет. (Хотя это есть нередкая причина, что гордятся костыли и правится ядро). Но те, которые допускается/возможно поменять - обязательно. Грубо говоря - те, что могут быть кастомизированы юзером для его задач.
Но это никак не относится к вопросу ТСа.
Но те, которые допускается/возможно поменять - обязательно. Грубо говоря - те, что могут быть кастомизированы юзером для его задач.
Конечно. Я с самого начала с этого и начал.
Я с самого начала с этого и начал.
Ты с самого начала убедил ТСа делать неправильно.