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

Profunda Entendimento do Mecanismo de Carregamento Automático de Classes em PHP

Carga automática do PHP:

No PHP5Antes, para usar algum objeto ou método de objeto, precisávamos incluir ou require, antes de poder usá-lo, cada vez que usar um objeto, precisávamos escrever uma include, muito complicado

Os criadores do PHP quiseram tornar mais simples, melhor ser capaz de incluir uma classe, se ainda não foi incluído no momento, o sistema pode automaticamente encontrar a classe, importá-la automaticamente~

Então: a função __autoload() surgiu.

Normalmente colocado dentro da classe de entrada do aplicativo, por exemplo, no discuz, está colocado no arquivo class_core.php.

Primeiro vamos falar de um exemplo simples:

Primeira situação:O conteúdo do arquivo A.php é o seguinte

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

O conteúdo do arquivo C.php é o seguinte:

<?php  
function __autoload($class)  
{  
$file = $class . '.php';  
if (is_file($file)) {  
require_once($file);  
}  
}  
$a = new A(); //Aqui será automaticamente chamado __autoload, para incluir o arquivo A.php
?>

Segunda situação:Às vezes eu quero personalizar o autoload e quero um nome mais legal, loader, então C.php muda para o seguinte:

<?php
function loader($class)
{
$file = $class . '.php';
if (is_file($file)) {
require_once($file);
}
}
spl_autoload_register('loader'); //Registre um método de carregamento automático, sobrescrevendo o __autoload original
$a = new A();
?>

Terceira situaçãoEu quero que ele seja mais alto e mais bonito, usando uma classe para gerenciar o carregamento automático

<?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 é o melhor formato atual.

Normalmente, usamos spl_autoload_register(*)Colocado no script de entrada, ou seja, chamado no início. Por exemplo, a abordagem discuz abaixo.

if(function_exist('spl_autoload_register')){
  spl_autoload_register(array('core', 'autoload')); //Se for PHP5Acima, se houver função de registro, registre o autoload da classe core que você escreveu como função de carregamento automático.
}
  function __autoload($class){     //Se não for, escreva a função nativa do PHP __autoload para que ela chame sua função core.
    return core::autoload($class);
  }
}

Este fragmento colocado no início do arquivo de entrada é naturalmente excelente ~

Aqui está o conteúdo total que o editor compartilha com você sobre a compreensão profunda do mecanismo de carregamento automático de classes PHP, esperando que ele possa oferecer uma referência para vocês, e esperando que vocês apoiem mais o tutorial Grito.

Você Também Pode Gostar