Perché usare se function_exist?


30

Ho notato che molti sviluppatori di temi WordPress lo userebbero in funzioni.php

if (function_exists('register_nav_menus')) {
    register_nav_menus (array('primary' => 'Header Navigation'));
}

Per quanto mi riguarda, io ALWAYSE uso add_action per ogni funzione che sto usando in functions.php

Quindi, quanto sopra sarebbe scritto come:

add_action('init', 'my_register_nav_menus');

function my_register_nav_menus() {
    register_nav_menus (array('primary' => 'Header Navigation'));
}

Ho due domande:

  1. Perché usare l'istruzione if nel primo metodo?

  2. Qual è il modo corretto?

Risposte:


35

Controllare se esistono funzioni di WordPress incorporate prima di chiamarle è per la compatibilità con le versioni precedenti che IMHO non è necessaria.

Quindi, se vedi che if ( function_exists( 'register_nav_menus' ) )l'autore del tema supporta le versioni precedenti alla 3.0.

A volte vedi ancora if ( function_exists( 'dynamic_sidebar' ) )perché? Non saprei dirtelo perché dynamic_sidebar è stato introdotto in 2.2.

Un altro motivo per usarlo è rendere il tema o plug-in collegabile. Una funzione collegabile è quella che può essere ignorata in un tema figlio o in un altro plugin.

Questo viene fatto sulla definizione non sulla chiamata e si usa il! operatore per assicurarsi che non esista già prima di definirlo.

if ( ! function_exists( 'my_awesome_function' ) ) {
/**
 * My Awesome function is awesome
 *
 * @param array $args
 * @return array
 */
function my_awesome_function( $args ) {
  //function stuff
  return array();
  }
}

Al termine, un tema figlio o un altro plug-in può sovrascrivere quella funzione con la propria.


9

La function_existsfunzione non è un altro modo per caricare la funzione come la add_actionsua per controllare il tuo codice per vedere che non ci sono altre funzioni con lo stesso nome in modo da non infrangere il tuo codice. Da php.net:

Controlla l'elenco di funzioni definite, sia integrate (interne) che definite dall'utente, per nome_funzione.

Se hai la stessa funzione due volte nel tuo codice, questa si interromperà, ecco perché aggiungi il prefisso alla tua funzione con qualcosa di diverso da wp_.

Per saperne di più: http://php.net/manual/en/function.function-exists.php


0

puoi usare http://php.net/function_exists

if(function_exists('my_function')){
   // my_function is defined
}

OPPURE se si desidera vedere tutte le funzioni disponibili, quindi si stampa anche tutto,

echo "<pre>"; print_r(get_defined_functions());

stampa sulla pagina e puoi cercare quella funzione se non viene trovata nell'elenco significa che non è disponibile per l'uso.

potrebbe essere necessario attivare l'estensione per una particolare libreria.


0

php.net lo definisce come

(PHP 4, PHP 5, PHP 7) function_exists - Restituisce TRUE se la funzione specificata è stata definita

Devo essere d'accordo con Michelle in merito al fatto che potresti usare il controllo solo per qualcosa di simile al controllo del cast del tipo; quindi dovresti cercare se esistesse una funzione (su quella pagina o da qualsiasi cosa chiamata su quella pagina / riferimento al file), quindi sapresti se è sicuro eseguire un'altra funzione o analizzare eventualmente un modello HTML.

Come qualcuno ha detto, viene comunemente utilizzato per verificare se il tuo file / tema (utilizzando WordPress) è in grado di eseguire la richiesta necessaria. L'ho usato per verificare se un tema ha una parte modello specifica.

if ( function_exists( 'register_sidebar' ) ) { get_sidebar(); }


0

function_exists dovrebbe essere usato dopo il nome della funzione in un tema non prima.

add_action( 'loop_start', 'add_slider' );

function add_slider() {

if ( function_exists( 'soliloquy' ) ) { 

soliloquy( 'slider', 'slug' ); 

    }

}

Questo controlla per assicurarsi che il plugin sia attivo prima di emettere una funzione e / o markup, altrimenti potresti ricevere un errore come la chiamata a una funzione non definita.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.