⊗ppOpNsCA 107 of 107 menu

Função personalizada para carregamento automático de classes em OOP em PHP

Frequentemente, o carregamento automático padrão pode não atendê-lo por algum motivo. Nesse caso, você pode criar seu próprio carregamento automático.

Para isso, você precisa passar sua função de callback escrita por você como primeiro parâmetro para a função spl_autoload_register. Esta função será chamada quando o PHP detectar um acesso a uma classe não carregada. O nome da classe com o namespace será passado como parâmetro para esta função:

<?php spl_autoload_register(function($class) { // a variável $class conterá o nome da classe com o namespace }); ?>

E a responsabilidade da função é carregar essa classe via require com base no nome da classe. Ou seja, dentro desta função, devemos definir nossa própria regra para carregar classes, ou seja, nossa própria convenção de nomenclatura.

Vamos escrever um exemplo de um carregamento automático personalizado. Suponha, por exemplo, que estamos dizendo que o caminho para o arquivo da classe a partir da raiz do site será o mesmo que o namespace, mas preservando o caso dos caracteres.

Ou seja, se temos a classe Core\Admin\PageController, o caminho para ela deve ser Core/Admin/PageController.php.

Como você pode ver, para transformar o nome da classe com seu namespace, precisamos apenas trocar as barras invertidas por barras normais, e adicionar .php ao nome da classe. Vamos fazer isso:

<?php spl_autoload_register(function($class) { $filename = str_replace('\\', '/', $class) . '.php'; require($filename); }); ?>

No entanto, obteremos um caminho relativo para o arquivo (em relação à raiz do site). É melhor fazer um caminho absoluto, assim:

<?php spl_autoload_register(function($class) { $root = $_SERVER['DOCUMENT_ROOT']; $filename = $root . '/' . str_replace('\\', '/', $class) . '.php'; require($filename); }); ?>

Há mais uma nuance. Em diferentes sistemas operacionais, o caminho pelas pastas pode ter barra normal ou barra invertida. Vamos tornar nosso código independente do sistema operacional. Para isso, em vez da barra normal para separar os caminhos, usaremos a constante DIRECTORY_SEPARATOR, que contém a barra correta do sistema operacional no qual nosso script está sendo executado. No final, obtemos o seguinte código:

<?php spl_autoload_register(function($class) { $root = $_SERVER['DOCUMENT_ROOT']; $ds = DIRECTORY_SEPARATOR; $filename = $root . $ds . str_replace('\\', $ds, $class) . '.php'; require($filename); }); ?>

Teste a função de carregamento automático que criei.

Invente sua própria regra de carregamento automático e implemente-a.

Português
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nós usamos cookies para o funcionamento do site, análises e personalização. O processamento de dados é realizado de acordo com a Política de Privacidade.
aceitar todas configurar rejeitar