spl_autoload_register

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
62
Udine
www.stilisticamente.com
Buongiorno a tutti, ho questo problema, non riesco a far funzionare il mio vecchio file ClassAutoloader.php con la nuova configurazione del server.

ROOT\ --> libs/
|
classes/
connetti.class.php
....
ClassAutoloader.php
index.php
....

Il codice di ClassAutoloader.php
PHP:
<?php declare(strict_types=1);

/**
 *   ClassAutoload esegue l'autoload per le classi
 *   
 *   @author Marco Grazia
 */
class ClassAutoloader
{
    /**
     * Carica la classe quando richiamata e la registra nell'elenco delle classi attiva 
     * 
     * @param string $className
     */
    public static function loaderClasses(string $className) {
        $file = __DIR__ . '/libs/classes/' . strtolower(str_replace("\\", "/", $className)) . '.class.php';
        
            echo $file . '<br>';
           
        if ( file_exists($file) && is_readable($file))
            require_once $file;
    }
}

spl_autoload_extensions('.php');

spl_autoload_register( __NAMESPACE__  . '\\ClassAutoloader::loaderClasses' );

il codice di index.php
PHP:
<?php declare(strict_types=1);

try {
    include_once __DIR__ . '/ClassAutoloader.php';

    $pdo = new Connetti();  //  <<--<< ERRORE DI CLASSE NON TROVATA, MA IL PERCORSO E' GIUSTO :(
}
catch (Exception $e ) {
    echo $e->getMessage();
}

?>

la classe generica connetti.class.php che si trova in libs/classes/
PHP:
<?php declare(strict_types=1);
namespace libs\classes;

/**
 *
 * @author marco.grazia
 * 
 * La Classe Connetti, conette ad un database MariaDB/MySQL
 */
class Connetti
{

    /**
     * Handle della connessione
     */
    public $pdo = null;
    
    /**
     * Nome del database
     */
    private string $database = '';
    
    /**
     * Username
     */
    private string $username = '^_^';
    
    /**
     * Password per il database
     */
    private string $password = 'baubaumiciomicio';
    
    /**
     * Metodo iniziale della classe.
     * 
     * @param string $database con valore predefinito.
     */
    public function __construct (string $database = 'hahaha')
    {
        $this->database = $database;
        
        $dsn = 'mysql:host=localhost;dbname=' . $this->database . ';charset=utf8mb4';
        $options = [
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_EMULATE_PREPARES   => false,
        ];
        try {
            $this->pdo = new \PDO($dsn, $this->username, $this->password, $options);
        } catch (\PDOException $e) {
            throw new \PDOException($e->getMessage(), (int)$e->getCode());
        }
    }

    /**
     * Quando la classe viene dichiarata null, tutto viene cancellato e la memoria liberata.
     */
    function __destruct ()
    {
        if (!is_null($this->pdo)) {
            $this->pdo = null;
            $this->database = '';
        }
    }
}
in index.php ho anche provato a inserire un inclusione diretta al file con
include_once __DIR__ . '/libs/classes/connetti.class.php';
ma niente, sempre lo stesso errore.

Questo il percorso al file elaborato da ClassAutoloader C:\apache\users\marco\ambasciate/libs/classes/connetti.class.php la root è ambasciate
Questo è l'errore come definito da XDebug:
#​
Time​
Memory​
Function​
Location​
Call Stack​
( ! ) Error: Class 'Connetti' not found in C:\apache\users\marco\ambasciate\index.php on line 28
Fatal error: Uncaught Error: Class 'Connetti' not found in C:\apache\users\marco\ambasciate\index.php on line 28
1​
0.0009​
411528​
{main}( )...\index.php:0
 

Discussioni simili