¿Dónde se ve function_exists para decidir si existe una función?

La documentación dice: comprueba la lista de funciones definidas, ambos construidos en (interno) y definido por el usuario, para function_name. (FUENTE: http://php.net/manual/en/function.function-exists.php)

¿La función meramente analiza el documento único php usando function_exists, buscando cualquier función que cumplen? Por ejemplo, si tengo
if ( function_exists( 'get_custom_header' )
en header.php, la función buscará
get_custom_header
en header.php. ¿O la función en otros directorios o archivos, tales como functions.php o en otros archivos en la base de wordpresss (es decir.

la carpeta admin wp o wp incluye carpeta)?.


Solución 1

function_exists('f')
a ver si una función
f
fue declarado antes de la llamada a function_exists. Por lo tanto la respuesta directa a su pregunta es en la sección de funciones de la memoria del intérprete. El resultado de
function_exists
No sólo depende del archivo en que se declara la función y el archivo en que se realiza la llamada, pero en el camino de ejecución.

function a() {}
-- at another file executed later
echo function_exists('a');

// displays true
al mismo tiempo
echo function_exists('a');
// display false;
-- at another file executed later
function a() {}
function_exists
en el mismo archivo como la función de definición (que es un caso de uso no interesante trivial) siempre devolverá true porque el intérprete analiza todas las funciones antes de comenzar a ejecutar el archivo. Añadir a la diversión es el hecho de que las funciones anidadas se definen solamente cuando sus padres se evaluaron y toda la función de php son en el ámbito mundial que podría conducir a
function a() {
  function b() {}
}

echo function_exists('b');

// displays false
al mismo tiempo
function a() {
  function b() {}
}

a();
echo function_exists('b');

// displays true
En un código grande y complejo como wordpresss no es trivial para predecir el resultado de
function_exists
que seguramente es por qué no usa base este patrón ya.

Si usted tiene la opción utilice ganchos en su lugar..

Solución 2

Cuando el intérprete PHP procesa los archivos, desde su inicial
index.php
para el archivo actual que contiene su
function_exists
, Lee cada variable, función, clase, método, propiedad... literalmente todo y los almacena en una gran Hash Table. Básicamente, los nombres de esos métodos y variables son hash y utilizan como las llaves.

Ahora cuando usted llame
function_exists
nombre de la función hash y se ve en la tabla hash de una clave coincidente. ¿Sabe acerca de todo hasta el punto de con que llamar a la función, incluyendo lo que está dentro de cada archivo incluido
include
y
require
.

Pero no sabe nada de lo que viene después..

Solución 3

Sí la función php function_exists simplemente analizar solamente en el archivo donde está en la función, pero no en los ficheros incluidos que están después de la condición de
function_exists
. Tan en orden desea comprobar la función entonces la función con el archivo debe incluirse por encima de la
function_exists
condición. Esto hará eco sí porque el aspecto de la función está incluido en el archivo antes de que se comprueba la condición.

include('ext_include.php');
if (function_exists('look')) {
    echo "yes";
} else {
    echo "no";
}
Esto no se hace eco de sí en cambio hará eco no
if (function_exists('look')) {
    echo "yes";
} else {
    echo "no";
}
include('ext_include.php');
NOTA:
ext_include.php
es el archivo php que tiene
look
Espero que esto ayuda a la función..




Problemas relacionados

function_exists llamado function.php

¿Por eso comprobar si la función no existe en functions.php?

creación de categorías mediante programación

Reemplazar la función en un tema infantil

Fatal error: no puede redeclarar admin_notice()

¿Cómo puedo cambiar una función en un tema principal vía un niño temas functions.php

Compruebe si Post título existe, insertar el post si no es así, añadir # Incremental a Meta si hace

Encuesta anónima

Cómo comprobar si post meta clave existe o no en la base de datos de wordpress

is_taxonomy está obsoleto. ¿Cuál es la alternativa?

¿Donde puedo crear mi propia función en wp admin

Cómo reemplazar una función conectable

Source: Stack Exchange Inc; License: cc by-sa 3.0 Contacto / Contact