Eu estou familiarizado com o uso module_exists
em um módulo e em situações como:
- Habilite alguma funcionalidade extra em um módulo, desde que outro módulo também esteja disponível no site. O módulo Reservations: Email contém um exemplo (na verdade, existem muitos exemplos disso), conforme mostrado na fonte do módulo : usar tokens (no corpo do e-mail) requer que o módulo Token esteja ativado.
- Implemente dependências de módulo em um tema, conforme mostrado na resposta a " Como implementar dependências de módulo em um tema e empacote módulos com um tema? ".
No entanto, também existem function_exists
, como mostrado na resposta a " É possível declarar uma dependência da biblioteca Javascript no Hook.info? ".
Tenho a impressão de que usar function_exists
é uma abordagem mais robusta (segura) em comparação com module_exists
. Especialmente se você quiser ter certeza de que alguma função (adicionada em uma versão mais recente de um módulo) está disponível, enquanto, ao usá- module_exists
lo, você corre o risco de encontrar erros como os seguintes:
- se um site está ainda usando uma antiga versão de um módulo, que não tem essa função ainda (para que você não deve tentar usá-lo ainda ).
- se um site está já usando uma nova versão de um módulo, que não tem essa função mais (para que você não deve tentar usá-lo mais ).
Minha pergunta : quais são os critérios típicos, ou prós / contras, para decidir usar um module_exists
versus function_exists
?
fonte
MODULENAME_requirements
na postagem vinculada? Sim, isso faria mais sentido como uma chamada paramodule_exists
. Como o MPD mencionou, a maneira de mais alto nível / mais abstraída de garantir que uma dependência tenha certa funcionalidade é examinar o código para uma liberação e fazer com que seu código dependa de uma versão específica com a qual você sabe que seu código funciona. Assim como o Compositor / NPM / Bundler / etc, faça-oVocê está certo,
function_exists
é uma maneira mais robusta de verificar a existência da função API fornecida pelo módulo contrib. É muito adequado para usar diretamente a API do módulo contrib.eu uso API de cache de sessão como um exemplo:
No entanto, alguns módulos contrib fornecem apenas algumas propriedades ou recursos extras, é muito difícil dizer qual é a função dependente. Nesse caso, você precisa usar
module_exists
Eu uso o Elements como um exemplo:
fonte
session_cache_set
está sendo fornecido pelo drupal.org/project/session_cache ou outro módulo e, portanto, faz o que deseja?function_exists
pode impedir erro de função indefinido quando o módulo contrib mudou sua API após a atualização. Claro, o método mais garantia é embrulharfunction_exists
commodule_exits
como @Clive mencionado, mas, para mim, é muito tedioso.function_exits
na verdade, evitar que o site de completamente intermediação para baixo ...As três respostas (interessantes) anteriores me parecem de alguma forma confirmar minha "percepção" (como descrevi na minha pergunta). Curiosamente, essas respostas foram originalmente escritas independentemente umas das outras (elas foram postadas mais ou menos no mesmo momento, conforme ilustrado na linha do tempo desta pergunta , use o "formato de alternância" para ver "min").
Jimmy KoA resposta de (+ comentários abaixo) ilustra mais alguns exemplos de como o uso
function_exists
pode tornar um módulo mais robusto em relação a possíveis alterações em algum outro módulo que um módulo usa (depende).A resposta de Clive mostra que você também pode combinar
module_exists
efunction_exists
, enquanto o comentário abaixo resolveu minhas dúvidas sobre o meufunction_exists
exemplo (ou seja, ele deveria usarmodule_exists
).A resposta do mpdonadio (+ comentários abaixo) é, pelo menos para mim, a mais difícil de digerir. Mas depois de revisar o comentário de Shawn Conn abaixo, encontrei mais alguns links que fornecem mais detalhes sobre tudo isso, ou seja:
"Minha conclusão" (depois de digerir as respostas anteriores): deixe que o núcleo do Drupal use
function_exists
, e os módulos contribuídos / personalizados devem tentar, o máximo possível, manter-semodule_exists
... embora haja exceções ...fonte