Namespace e autoloading usando spl_autoload_register()

otto9due

Utente Attivo
22 Feb 2014
591
25
28
Buongiorno a tutti, spiego brevemente il problema che mi perseguita. Sembra banale ma non riesco ad uscirne.

Per un piccolo progetto personale ho voluto provare ad utilizzare i namespace per la prima volta, ma in questo caso specifico mi succede una cosa molto strana, che per la varità non so neanche se dipenda dai namespace o dai percorsi dei file.

Magari qualcuno di voi mi sa dire meglio.



Vi spiego in brave.

Ho questa alberatura (vedi foto allegata) ed utilizzo xampp, il progetto si trova in xampp\htdocs\myprog\ ;

Ora dalla index.php, in root, con 'namespace controller' e autocontroller.php incluso, riesco ad accedere alle classi contenute nella cartella 'controller' e sottostanti, se invece provo a richiamare ( sempre con autoloader incluso ) dal file installpage.php la classe che si trova ad esempio in controller/install/installer.php o controller/db/dbConnection.php ricevo un Fatal error: Uncaught Error: Class "controller\install\installer" not found.



Autoloader.php

PHP:
<?php

namespace controller;

class autoloader
{
    public function register()
    { 
        spl_autoload_register(function ($class) {
            $file = str_replace('\\', DIRECTORY_SEPARATOR, $class).'.php';
            if (file_exists($file)) {
                require_once $file;

                return true;
            }

            return false;
        });
    }
}



Installpage.php


PHP:
<?php
// Namespace
namespace controller;

// Autoloader
include '../autoloader.php';
$loader = new autoloader;
$loader -> register();

// Install
$inst = new install\installer; // qui si blocca
$inst -> createUserTable();
$inst -> createSuperUser();



Installer.php inizia così..
PHP:
<?php

namespace controller\install;
use \PDO;

class installer extends \controller\db\dbConnection {
...
}
 

Allegati

  • img.png
    img.png
    9,6 KB · Visite: 144
Ultima modifica:

Discussioni simili