English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Una comprensión profunda del mecanismo de carga automática de clases en PHP

Carga automática de php:

En php5Antes, si queríamos usar alguna clase o método de clase, debíamos incluir o requerir primero, y luego poder usarla, y cada vez que se usara una clase, se tenía que escribir una include, lo que es molesto

Los autores de php quieren que sea más simple, mejor que cuando se necesite引用 una clase, si no se ha incluido actualmente, el sistema pueda encontrar automáticamente la clase y importarla automáticamente~

Por lo tanto, surge la función __autoload().

Generalmente se coloca en la clase de entrada de la aplicación, por ejemplo, en discuz, se coloca en class_core.php.

Primero, hablemos de un ejemplo simple:

Primera situación:El contenido del archivo A.php es el siguiente

<?php
class A{
  public function __construct(){
      echo 'fff';
  }
}
?>

El contenido del archivo C.php es el siguiente:

<?php  
function __autoload($class)  
{  
$file = $class . '.php';  
if (is_file($file)) {  
require_once($file);  
}  
}  
$a = new A(); //Aquí se llamará automáticamente __autoload, para importar el archivo A.php
?>

Segunda situación:A veces, quiero personalizar el autoload y deseo un nombre más genial, loader, por lo que C.php se cambia a lo siguiente:

<?php
function loader($class)
{
$file = $class . '.php';
if (is_file($file)) {
require_once($file);
}
}
spl_autoload_register('loader'); //Registrar un método de carga automática, sobrescribir el __autoload existente
$a = new A();
?>

Tercera situaciónEspero que sea más elegante, usar una clase para gestionar la carga automática

<?php  
class Loader  
{  
public static function loadClass($class)  
{  
$file = $class . '.php';  
if (is_file($file)) {  
require_once($file);  
}  
}  
}  
spl_autoload_register(array('Loader', 'loadClass'));  
$a = new A();
?>

Este es el formato mejor.

Generalmente, escribimos spl_autoload_register(*)se coloca en el script de entrada, es decir, se llama desde el principio. Por ejemplo, el método de discuz siguiente.

if(function_exist('spl_autoload_register')){
  spl_autoload_register(array('core','autoload')); //Si es php5Además, si hay una función registrada, registre el autoload de la clase core que escribió como función de carga automática
}
  function __autoload($class){     //Si no es así, entonces reescribe la función nativa de php __autoload para que llame a su función en core.
    return core::autoload($class);
  }
}

Este fragmento se coloca en la parte superior del archivo de entrada, naturalmente es excelente ~

La profundidad de comprensión del mecanismo de autocarga de clases de PHP que compartí con ustedes es todo lo que tengo para ofrecer. Espero que les sea útil como referencia y que apoyen más a la guía de教程.

Te gustará