#php #wordpress
#php #wordpress
Вопрос:
просматривая основной код word press, я наткнулся на файл, в котором много пустых функций, например :
/**
* @ignore
*/
function apply_filters() {}
я действительно не знаю, какая польза от объявления пустой функции в php..
я нашел это в wp-admin/list-scripts.php в строке 34 — 37
и в wp-include/plugin.php в строке 163 — 207 повторно объявляется та же функция с некоторыми работами в ней
В общей сложности у меня есть 2 вопроса
Какая польза от объявления пустой функции в php
Почему wordpress не показывает ни Fatal error:
одной, поскольку та же функция уже объявлена. ?
Ответ №1:
-
В PHP (и многих других языках ООП) пустая функция (или, точнее, метод) может использоваться в интерфейсе. Любой класс, наследующий этот интерфейс, должен реализовывать объявленные функции. Однако, когда я проверял в последний раз (то есть 2 минуты назад), WordPress на самом деле не является системой ООП, поэтому переходим к 2.
-
list-scripts.php не является файлом WordPress по умолчанию — я не могу найти его ни в одной из моих установок WP. Возможно, вы захотите протестировать, поместив a
die('called');
поверх файла и посмотреть, будет ли он выполнен. Таким образом, WordPress не столкнется с дублированием объявления функции, и никаких фатальных ошибок не будет. -
Теперь, даже если list-scripts.php является файлом WP по умолчанию, при работе с WP (и PHP в целом) чаще всего вы видите это:
if (!function_exists('apply_filters')) { function apply_filters($arg1, $arg2) { // code is poetry } }
Это гарантирует, что функция объявляется только в том случае, если она не была объявлена ранее, и позволяет избежать фатальной ошибки.
Ответ №2:
Я предполагаю, что wordpress будет условно включать либо один, либо другой файл. API более низкого уровня wordpress ожидает, что эти функции будут определены, и вызывает их. Само расширение может свободно реализовывать функцию или нет, однако оно должно, по крайней мере, предоставлять пустое тело функции. Концепции, лежащие в основе этого, очень похожи на работу интерфейсов в ООП.