Ciao, ho un problema 
Sto rifacendo un vecchio sito bilingue, e sto avendo dei problemi col richiamo delle classi da... una classe.
Allora prima di tutto la struttura del sito:
codice:
ROOT --> BIN --> CLASSES
| | --> INTERFACES
| | --> INCLUDES
IT --> index.php // sito in italiano
EN --> index.php // sito in inglese
autoloader.php
index.php
Nulla di speciale, ho ovviamente esluso file e directory di supporto, come: immagini, css e javascript che per ora non servono alla domanda.
Quindi: autoloader.php è richiamato da ogni file PHP, sia che si trovi nella ROOT del sito, o che si trovi in EN o IT e come dice il nome, carica dinamicamente le classi che si trovano nella directory CLASSES dentro la directory generale BIN.
Il tutto funziona bene, ma quando tento di richiamare una classe dall'interno della stessa classe, il sistema mi dice errore: classe non trovata!
Bene un po' di codice: autoloader.php
Codice PHP:
class Autoloader
{
public static function loaderClasses( $className ) {
$path = ''; // Se si è nella root il path è blank.
// Se ci si trova in una delle due directory IT o EN il path deve tornare indietro di uno step.
// REAL_PATH è una costante creata in un file di configurazione che viene caricato prima di autoloader.php e contiene il path del file chiamante autoloader.php
if ((preg_match('/\bit/i', REAL_PATH) > 0 ) || (preg_match('/\ben/i', REAL_PATH) > 0 )) $path = '/..';
$classe = REAL_PATH . $path . '/bin/class/' . str_replace('\/_\\', DIRECTORY_SEPARATOR, strtolower( $className ) ) . '.class.php';
if ( file_exists( $classe ) && is_readable( $classe ) )
require ( $classe );
}
public static function loaderInterfaces( $interfacesName ) {
$path = '';
if ((preg_match('/\bit/i', REAL_PATH) > 0 ) || (preg_match('/\ben/i', REAL_PATH) > 0 )) $path = '/..';
$interfaccia = REAL_PATH . $path . '/bin/interface/' . str_replace('\/_\\', DIRECTORY_SEPARATOR, strtolower( $interfacesName ) ) . '.int.php';
if ( file_exists( $interfaccia ) && is_readable( $interfaccia ) )
require ( $interfaccia );
}
}
spl_autoload_extensions('.class.php, .int.php');
spl_autoload_register( __NAMESPACE__ . '\\Autoloader::loaderClasses' );
spl_autoload_register( __NAMESPACE__ . '\\Autoloader::loaderInterfaces' );
Quindi se lo richiamo da un file php sia da ROOT che da una delle due directory di lingua e poi carico una classe, questa viene caricata senza problemi.
Per esempio
Codice PHP:
// prova.php
include 'autoloader.php';
$v= new Ciccio(); // Ciccio esiste
Ma se creando la classe ciccio, che ripeto si trova in ROOT-->BIN-->CLASSES e da questa voglio richiamare la classe paperino, quest'ultima non viene trovata.
Esempio: file paperino.class.php
Codice PHP:
// Classe paperino
class Paperino {
function chiSono() {
return 'Ciao sono Paperino';
}
]
file: ciccio.class.php -- primo esempio
Codice PHP:
class Ciccio {
function __construct() {
echo Paperino::chiSono(); // Non trova la classe.
}
file: ciccio.class.php -- secondo esempio
Codice PHP:
class Ciccio exteds Paperino {
function __construct() {
echo parent::chiSono(); // Non trova la classe.
}
In altre parole anche se autoloader.php carica le classi regolarmente, se dopo aver caricata una classe dal file che lo chiama, questa non trova una classe ausiliaria.
Come posso risolvere?
Grazie.