Salve a tutti,
sul mio sito ho una funzione di autoloader delle classi che viene eseguita dalla classica funzione __autoload(),
leggendo in giro su internet ho visto che questa funzione è segnata come "Deprecata" nelle versioni di php 7.2 e in sua sostituzione si dovrebbe usare la sua sostituta spl_autoload_register().
ho il seguente file init.php in cui è scritta la funzione __autoload()
Codice PHP:
<?php
// FILE: init.php
require_once ROOT . DS . 'config' . DS . 'config.php';
function __autoload ( $class_name )
{
$lib_path = ROOT . DS . 'lib' . DS . strtolower( $class_name ) . '.class.php';
$controllers_path = ROOT . DS . 'controllers' . DS . str_replace( 'controller', '', strtolower( $class_name ) ) . '.controller.php';
$model_path = ROOT . DS . 'models' . DS . strtolower( $class_name ) . '.php';
if ( file_exists( $lib_path ) )
require_once $lib_path;
elseif ( file_exists( $controllers_path ) )
require_once $controllers_path;
elseif ( file_exists( $model_path ) )
require_once $model_path;
else
{
throw new Exception( 'Failed to include class: ' . $class_name );
}
}
non dovrebbe diventare nel seguente modo per poter usare il metodo spl_autoload_register()?
Codice PHP:
<?php
// FILE: init.php
require_once ROOT . DS . 'config' . DS . 'config.php';
function MyAutoloader ( $class_name )
{
$lib_path = ROOT . DS . 'lib' . DS . strtolower( $class_name ) . '.class.php';
$controllers_path = ROOT . DS . 'controllers' . DS . str_replace( 'controller', '', strtolower( $class_name ) ) . '.controller.php';
$model_path = ROOT . DS . 'models' . DS . strtolower( $class_name ) . '.php';
if ( file_exists( $lib_path ) )
require_once $lib_path;
elseif ( file_exists( $controllers_path ) )
require_once $controllers_path;
elseif ( file_exists( $model_path ) )
require_once $model_path;
else
{
throw new Exception( 'Failed to include class: ' . $class_name );
}
}
spl_autoload_register('MyAutoloader');
Così facendo le mie classi non si autocaricano e di conseguenza ricevo errori di classi non trovate.
Sostanzialmente i cambiamenti dovrebbero essere il nome della funzione di autoloader in 'MyAutoloader'
e l'aggiunta del metodo spl_autoload_register('MyAutoloader')
non riesco a capire perchè non funziona, potete aiutarmi gentilmente?
Vi ringrazio in anticipo!
Edit:
Scusate, ho trovato il problema. Lascio la soluzione nel caso qualcuno ne avesse bisogno. L'errore era nell'eseguire l'istruzione require_once ROOT . DS . 'config' . DS . 'config.php';
prima dell' spl_autoload_register('MyAutoloader'); è bastato portarlo in testa al documento e tutto funziona correttamente.
Prima della correzione.
Codice PHP:
<?php
// FILE: init.php
require_once ROOT . DS . 'config' . DS . 'config.php';
function MyAutoloader ( $class_name )
{
// ... resto del codice php ...//
Dopo la correzione.
Codice PHP:
<?php
// FILE: init.php
spl_autoload_register('MyAutoloader');
require_once ROOT . DS . 'config' . DS . 'config.php';
function MyAutoloader ( $class_name )
{
// ... resto del codice php ...//