Различие между реализацией перехвата Drupal и обычной функцией

#php #drupal #naming-conventions #hook #drupal-hooks

#php #drupal #соглашения об именовании #перехват #drupal-перехваты

Вопрос:

У меня есть пара вопросов по соглашениям о кодировании в Drupal, которые я не смог прояснить из документов или кода.

Помимо знания имени каждого перехвата в Drupal, есть ли способ отличить функцию, которая реализует перехват, от функции, которая просто предоставляет немного функциональности для перехвата? Либо что-то принудительное с помощью кода, либо какое-то соглашение?

Второй, возможно, связанный с этим вопрос. После просмотра основных модулей я заметил, что некоторые функции называются с начальным подчеркиванием

 function _node_rankings(SelectQueryExtender $query) {
    ...
}
  

Какое значение придается подчеркиванию? Я предполагаю, что это имитирует «защищенное» соглашение, что означает, что его следует вызывать только из других функций в node.module файле; однако я не смог найти ничего, что подтверждало бы это.

Я знаю о стандартахкодирования, но они, похоже, ориентированы на общий синтаксис PHP, а не на соглашения, предназначенные для внутренних систем Drupal.

Комментарии:

1. На ранних этапах кодирования stardarts это было, я предполагаю, что они удалили соглашение о «подчеркивании» как необычное…

Ответ №1:

Вы правы, префикс подчеркивания в именах функций указывает на то, что ее следует рассматривать как закрытую функцию, вызываемую только модулем, который ее объявил.

Я не знаю, есть ли это в официальных документах Drupal, но есть несколько сообщений о drupal.org подтверждаю это (например, это или this).

РЕДАКТИРОВАТЬ: и да, это также помогает избежать превращения «обычной» функции в реализацию перехвата (хотя вам следует стараться не называть функции в честь существующих перехватов).

Ответ №2:

В ответ на ваш первый вопрос, если вы посмотрите на код большинства модулей, в комментариях выше реализаций перехвата обычно будет сказано:

 /**
 * Implementation of hook_foo().
 */
  

Поработав некоторое время с Drupal, вы начнете распознавать наиболее распространенные перехваты.

Комментарии:

1. 1 за информацию. Я видел это, но теперь это всегда присутствует. Я ищу детерминированный способ (который, честно говоря, я не думаю, что существует).

2. Если вы запустите модуль Coder в другом модуле, он сообщит вам, в каких реализациях перехвата отсутствует строка документации, описанная выше: drupal.org/project/coder