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

Duda con metodo __autoload($classname)

Estas en el tema de Duda con metodo __autoload($classname) en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola Espero me puedan ayudar tengo en el controlador una linea que instancia al modelo ej: $model = new Model_Clientes(); el archivo en la carpeta ...
  #1 (permalink)  
Antiguo 20/12/2010, 20:57
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 8 meses
Puntos: 2
Pregunta Duda con metodo __autoload($classname)

Hola

Espero me puedan ayudar tengo en el controlador una linea que instancia al modelo ej: $model = new Model_Clientes(); el archivo en la carpeta de modelos se llama Model_Clientes.php mi duda y problema es porque no me funciona el metodo autoload que yo implemente en la clase Model_Clientes, se supone que si se instancia una clase, esta tratara de cargarse mediante el metodo autoload en caso de no encontrar ninguna referencia de carga explicitamente creada.

Codigo metodo __autoload
Código PHP:
Ver original
  1. public function __autoload($class)
  2.     {
  3.         $file = $class.'.php';
  4.         //classname = Model_Clientes
  5.         $config = Registry::get('config'); 
  6.         $dirs   = self::explodeIncludePath();
  7.  
  8.          if (!empty($dirs)) {
  9.             foreach ($dirs as $key => $dir) {
  10.                 $paths[] = $dir . DIRECTORY_SEPARATOR . $file;
  11.                     foreach ($paths as $filename){
  12.                         if (file_exists($filename))
  13.                             include_once $filename;
  14.                     }
  15.             }
  16.         } else {
  17.             include_once $file;
  18.         }              
  19.         return ;
  20.     }
Es asi o no.

Slds
  #2 (permalink)  
Antiguo 20/12/2010, 22:48
Avatar de De_la_Cuesta_13  
Fecha de Ingreso: abril-2009
Ubicación: Cali, Colombia.
Mensajes: 265
Antigüedad: 15 años
Puntos: 14
Respuesta: Duda con metodo __autoload($classname)

Poco entiendo de lo que tratas de comentar.

Por lo general la función autoload no se coloca dentro de clase alguna, ésta se ubica en un archivo que contiene otras funciones y en esta función haces el llamado a la clase, quizás donde ubicas tus controlodores, modelos, libs, etc.

Otra cosa muy distinta es el constructor propio de cada clase.
__________________
Sólo quien nunca nada hace, nunca se equivoca.
  #3 (permalink)  
Antiguo 21/12/2010, 02:56
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 5 meses
Puntos: 890
Respuesta: Duda con metodo __autoload($classname)

La función __autoload no necesita ser invocada explícitamente, solo necesita ser cargada antes de instanciar una clase.

Lo más común es hacerlo de esta manera - algo así :

Código PHP:
Ver original
  1. //Obviamente PATH es la ruta donde va a buscar las clases
  2. <?php
  3. function __autoload($class) {
  4.     if (file_exists( PATH . $class . ".php")) {
  5.         include_once( PATH .$class . ".php");
  6.     } else {
  7.     echo "No se encuentra la clase solicitada : ". $class;
  8. }
  9.  
  10. }
__________________
Drupal Argentina
  #4 (permalink)  
Antiguo 21/12/2010, 07:10
 
Fecha de Ingreso: diciembre-2010
Ubicación: Santiago, Chile
Mensajes: 16
Antigüedad: 13 años, 4 meses
Puntos: 3
Respuesta: Duda con metodo __autoload($classname)

__autoload es una función global que se llama automaticamente cuando requieres una clase aún no incluida.
  #5 (permalink)  
Antiguo 22/12/2010, 17:05
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: Duda con metodo __autoload($classname)

Hola

Todo lo que dicen ya lo se, se como funciona autoload mi problema es que no se porque no funciona el código que hice para implementarla. Así que les dejo mas información para ver si pueden orientarme mejor.

Yo tengo un controlador clientes, en este controlador creo una instancia de la clase del modelo Model_Clientes no incluyendo ningún requiere o include (once) en ninguna parte del controlador, por ende como PHP no encuentra referencia de esta clase tratara de incluirla mediante el método autoload, se supone, no mas bien supongo que el código de dicho método autoload debe implementarse en la clase del modelo ya que es esta la clase que se esta instanciando o debería implementarlo en la clase controlador debido a que la instancia se esta creando en la clase controlador clientes.

Slds
  #6 (permalink)  
Antiguo 22/12/2010, 17:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Duda con metodo __autoload($classname)

La forma correcta es que sea una función clase independiente que puedas incluir, por ejemplo en Zend lo que haces es incluir el Autoloader y después ya puedes trabajar con las clases:
Código PHP:
Ver original
  1. require_once 'Zend/Loader/Autoloader.php';
  2.  
  3. $loader = Zend_Loader_Autoloader::getInstance();
  4. // despues de este punto puedes incluir las clases que necesites
  5.  
  6. $form = new Zend_Form();
  7. $view = new Zend_View();
  8.  
  9. $filter = new Zend_Filter_Alnum();

Traduciendolo a una forma no-Zend podria ser algo así:
autoloader.php
Código PHP:
Ver original
  1. function __autoload($class) {
  2.         require_once $class . '.php';
  3. }
Código PHP:
Ver original
  1. require 'autoloader.php';
  2.  
  3. $clientesController = new ClientesController();
  4. $clientesModel = new ClientesModel();

Pero siempre debes de incluir la funcion autoloader antes de instanciar todo.

Saludos.

Etiquetas: metodo
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 21:32.