Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

PHP OO Problema con spl_autoload_register()

Estas en el tema de Problema con spl_autoload_register() en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, buenas noches. Estoy intentando hacer un plugin para wordpress, y me encuentro con un problema con la función spl_autoload_register... el caso es que he ...
  #1 (permalink)  
Antiguo 28/07/2014, 18:00
 
Fecha de Ingreso: octubre-2013
Ubicación: Pego Alicante
Mensajes: 25
Antigüedad: 10 años, 6 meses
Puntos: 0
Problema con spl_autoload_register()

Hola, buenas noches.

Estoy intentando hacer un plugin para wordpress, y me encuentro con un problema con la función spl_autoload_register... el caso es que he copiado el código (bastante al pie de la letra... ya que creo que hay poco que cambiar en este caso) de otro plugin, pero claro como argumento le paso un nombre de una función diferente (MaeSquareAutoLoader).

La función que he hecho ha sido la siguiente:

Código PHP:
Ver original
  1. function mae_autoInclude(){
  2.         if(!function_exists('spl_autoload_register'))
  3.             return;
  4.  
  5.         function MaeSquareAutoLoader($name) {
  6.             $name = str_replace('\\', DIRECTORY_SEPARATOR, $name);
  7.             $file = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR . $name . '.php';
  8.  
  9.            
  10.             echo "mae square" . $file . "<br>";
  11.            
  12.             if(is_file($file))
  13.                 require_once $file;
  14.         }
  15.  
  16.         spl_autoload_register('MaeSquareAutoLoader');
  17.     }

Como estaba un poco despistado y no salía lo que quería, puse el echo ese que se ve en el código.
Si el otro plugin está desactivado el echo escupe lo siguiente:
Cita:
mae squareC:\wamp\www\ajaume\wp-content\plugins\nostro\classes\wp_atom_server.php
mae squareC:\wamp\www\ajaume\wp-content\plugins\nostro\classes\WP_User_Search.php
En cambio si el otro plugin esta activado el comportatimiento es completamente diferente:
Cita:
mae squareC:\wamp\www\ajaume\wp-content\plugins\nostro\classes\SlideshowPluginAJAX .php
mae squareC:\wamp\www\ajaume\wp-content\plugins\nostro\classes\SlideshowPluginPost Type.php
mae squareC:\wamp\www\ajaume\wp-content\plugins\nostro\classes\SlideshowPluginGene ralSettings.php
mae squareC:\wamp\www\ajaume\wp-content\plugins\nostro\classes\SlideshowPluginSlid eshowStylesheet.php
mae squareC:\wamp\www\ajaume\wp-content\plugins\nostro\classes\SlideshowPluginShor tcode.php
mae squareC:\wamp\www\ajaume\wp-content\plugins\nostro\classes\SlideshowPluginInst aller.php
mae squareC:\wamp\www\ajaume\wp-content\plugins\nostro\classes\wp_atom_server.php
mae squareC:\wamp\www\ajaume\wp-content\plugins\nostro\classes\SlideshowPluginWidg et.php
mae squareC:\wamp\www\ajaume\wp-content\plugins\nostro\classes\WP_User_Search.php
mae squareC:\wamp\www\ajaume\wp-content\plugins\nostro\classes\SlideshowPluginSlid eInserter.php
Es como si registrara o cargara las clases que utiliza el otro plugin a través de mi función MaeSquareAutoLoader... qué estoy haciendo mal?? o es que es un fallo de la función spl_autoload_register??

Gracias por todo.
  #2 (permalink)  
Antiguo 29/07/2014, 06:54
 
Fecha de Ingreso: octubre-2013
Ubicación: Pego Alicante
Mensajes: 25
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Problema con spl_autoload_register()

Vale... creo que ni yo tenía un error, y por supuesto, la función de PHP tampoco... evidente.

Lo que me parece que pasa es que las funciones que se registran con spl_autoload_register forman una especie de lista, y cuando desde una clase se hace una llamada a un elemento (clase) desconocido, el handler de esta lista se pone en marcha y va recorriendo todas las funciones (con lo que quiera que tengan dentro) hasta encontrar ese elemento no conocido e incluirlo (al menos lo que yo hago) con el require_once...

Dentro de esta lista hay una prioridad, y parece que mi función tiene más prioridad que la del otro plugin (por que se registra primero, por que se registra después... no lo sé). Finalmente, cuando necesita acceder a una de las clases del otro plugin que aún no han sido cargadas recorre la lista de funciones, y eso incluye pasar por mi función (la función de mi plugin), que al estar situada antes, pasa primero por ella y después por la función registrada por el otro plugin...

Bueno... todo esto es deducción o interpretación... no es ciencia cierta... pero estoy bastante seguro que es así.

Muchas gracias.

Etiquetas: php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:25.