2012-05-17 19 views
7

Quiero clase de carga perezosa pero sin éxitoclase de carga perezosa en PHP

<?php 

class Employee{ 

    function __autoload($class){ 

     require_once($class); 
    } 


    function display(){ 

     $obj = new employeeModel(); 
     $obj->printSomthing(); 
    } 
} 

Ahora, cuando hago esta

function display(){ 
      require_once('emplpyeeModel.php'); 
      $obj = new employeeModel(); 
      $obj->printSomthing(); 
     } 

Funciona pero quiero carga perezosa la clase.

Respuesta

4

Cambio Employee un poco:

class Employee { 

    public static function __autoload($class) { 
     //_once is not needed because this is only called once per class anyway, 
     //unless it fails. 
     require $class; 
    } 

    /* Other methods Omitted */ 
} 
spl_autoload_register('Employee::__autoload'); 
+0

muchas gracias ... – user4o01

1

Primero, si todo es mejor usar spl_autoload_register() (consulte la nota en el manual de php para carga automática).

Luego volviendo a su problema; solo si la función display() está en el mismo directorio que employeeModel esto funcionará. De lo contrario, utilice rutas absolutas (ver también include() y include_path setting

6

__autoload no es una función independiente un método de una clase El código debería tener este aspecto:.

<?php 

class Employee{ 

    function display(){ 

     $obj = new employeeModel(); 
     $obj->printSomthing(); 
    } 
} 

function __autoload($class) { 
    require_once($class.'.php'); 
} 

function display(){ 
    $obj = new Employee(); 
    $obj->printSomthing(); 
} 

ACTUALIZACIÓN

Ejemplo tomado del manual php:

<?php 
function __autoload($class_name) { 
    include $class_name . '.php'; 
} 

$obj = new MyClass1(); 
$obj2 = new MyClass2(); 
?> 
+0

No debería usar '__autoload' en todo –

+0

@ExplosionPills Podría explicar por qué lo dijo? Tengo curiosidad por mí mismo. – sprain

+3

@sprain Debería escribir una función de autocarga llamada algo diferente, tal vez como parte de una clase como lo ha hecho, y luego llamar a 'spl_autoload_register'. Imagina que este código está en un gran sitio web con muchas dependencias entrecruzadas en las páginas. ¿Qué pasa si alguien ya ha usado '__autoload' en una aplicación que no ha sido probada y que sucede que incluye el archivo donde está definiendo el otro' __autoload'. –

Cuestiones relacionadas