Visualizzazione dei risultati da 1 a 8 su 8

Discussione: PHP Class not found

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    8

    PHP Class not found

    Ciao a tutti!
    Per impratichirmi un po' di piu' con il PHP sto creandomi un piccolissimo framework con l'obbiettivo di svilupparci il nuovo sito per il mio gruppo.

    Ho creato una semplice classe di configurazione (praticamente un placeholder):

    Codice PHP:
    <?php /* Class to handle all application wide Quarkweb configuration parameters. */ namespace quarkweb;  
    class 
    QWConfiguration 
    {   
    protected static 
    $mClassName "QWConfiguration"//By changing this before the configuration is read, an application can force the use of a specified configuration class
    public function __construct()   {    //initialize the values   }     
    public static function getClassName()   {    return QWConfiguration::$mClassName;   }   public static function setClassName($aClassName)   {    QWConfiguration::$mClassName $aClassName;   }     
    static public function 
    getConfiguration()   
    {    
    $aClassName QWConfiguration::getClassName();    
    $aClass = new $aClassName();    
    return 
    $aClass;   
    }  
    ?>
    L'idea e' di usare una specie di factory per permettere all'applicazione di scegliere la classe che preferisce e che poi, al momento opportuno, verra' istanziata.
    Ma ricevo questo errore:

    Fatal error: Class 'QWConfiguration' not found in C:\inetpub\wwwroot\quarkweb\core\qwconfiguration.p hp on line 28

    Scommetto che chiunque con mezza esperienza in PHP scova l'errore in due secondi, ma io proprio non ci riesco!
    Qualcuno mi riesce ad aiutare? Grazie!

  2. #2
    aspetta.. non ho ben capito lo scopo di questo script....

    il problema comunque è che devi usare "self::" e non QWconfiguration
    Questa volta, più che un voto.. è favoreggiamento.

  3. #3
    Codice PHP:
    class QWConfiguration 
    {   
    protected static 
    $mClassName "QWConfiguration"//By changing this before the configuration is read, an application can force the use of a specified configuration class
    public function __construct()   {    //initialize the values   }     
    public static function getClassName()   {    return self::$mClassName;   }   public static function setClassName($aClassName)   {    self::$mClassName $aClassName;   }     
    static public function 
    getConfiguration()   
    {    
    $aClassName self::getClassName();    
    $aClass = new $aClassName();    
    return 
    $aClass;   
    }  
    ?> 
    scusa ero col cell.. poco fa
    Questa volta, più che un voto.. è favoreggiamento.

  4. #4
    Utente di HTML.it L'avatar di Secta
    Registrato dal
    May 2002
    Messaggi
    365
    Non centra niente self::, può usare il nome della classe al suo posto... il problema è il namespace... eliminano o fallo precedere a $aClassName e vedrai che funziona.

    Ma sinceramente mi sfugge il senso di questa classe Mi spieghi esattamente cosa vuoi fare? Vuoi forse risolvere un problema di dipendenze? Nel qual caso potresti pensare di iniettare direttamente l'oggetto (qualsiasi) dentro la classe anziché crearlo dentro questa... spiegati meglio
    "Dai diamanti non nasce niente, dal letame nascon fiori."
    Fabrizio De Andrè

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    8
    @Secta: perfetto grazie!

    Per quanto riguarda il funzionamento: premetto che sono un programmatore Java/C++ e che quindi probabilmente, in questa mia prima esperienza di applicazione PHP 'semiseria', sto iniettando paradigmi e abitudini che non appartengono a questo mondo

    Detto questo l'idea e' la seguente: ci potranno essere diverse possibilita' per la configurazione (da file, da db, da script php, etc) e l'applicazione, prima di inizializzare il framework, setta il nome della classe che desidera che venga utilizzata. Al momento opportuno il framework istanza l'oggetto (default: la classe stessa).

    Detto questo sto pensando ad alternative piu' flessibili: questa era la prima idea, giusto per inserire fin da subito un 'placeholder' di una classe per la configurazione.

    Grazie ancora a tutti!

  6. #6
    Utente di HTML.it L'avatar di Secta
    Registrato dal
    May 2002
    Messaggi
    365
    Ok ora mi è più chiaro.

    Nel tuo primo post hai detto "una specie di factory"... ma perchè non utilizzare una "vera" implementazione di questo pattern? O meglio ancora potresti iniettare l'oggetto stesso della classe che vuoi utilizzare... qualcosa del genere

    Codice PHP:
    class QWConfiguration
    {
        protected 
    $object;
        
        public function 
    __construct(QWConfig $object)
        {
            
    $this->object $object;
        }
        
        public function 
    getConfig()
        {
            return 
    $this->object->getConfig();
        }
    }

    abstract class 
    QWConfig
    {
        protected 
    $config;
        protected 
    $options;
        
        public function 
    __construct($options)
        {
            
    $this->options $options;
        }
        
        public function 
    getConfig()
        {
            return 
    $this->initConfig();
        }
        
        abstract protected function 
    initConfig();
    }

    class 
    QWConfigDb extends QWConfig
    {
        protected function 
    initConfig()
        {
            if (!
    $this->config)
            {
                
    // mi collego al database usando $this->options['server'] e $this->options['password'] ed eventualmente uso le altri opzioni
                
    $this->config sprintf('Dati estrapolati dal db... server => %s e password => %s
    '
    $this->options['server'], $this->options['password']);
            }
            
            return 
    $this->config;
        }
    }

    class 
    QWConfigXml extends QWConfig
    {
        protected function 
    initConfig()
        {
            if (!
    $this->config)
            {
                
    // faccio il parsing di un file xml usando $this->options['path'] ed eventualmente uso le altre opzioni
                
    $this->config sprintf('Dati ottenuti dal parsing del file xml... path => %s'$this->options['path']);
            }
            
            return 
    $this->config;
        }
    }

        
    $config = new QWConfiguration(new QWConfigDb(array(
            
    'server'   => 'localhost',
            
    'password' => 'password',
            
    'opt_1'    => 'opzione_1',
            
    'opt_2'    => 'opzione_2',
            
    'opt_N'    => 'opzione_N' 
        
    )));
        
        echo 
    $config->getConfig();
        
        
    $config = new QWConfiguration(new QWConfigXml(array(
            
    'path'  => 'percorso/al/file.xml',
            
    'opt_1' => 'opzione_1',
            
    'opt_2' => 'opzione_2',
            
    'opt_N' => 'opzione_N'
        
    )));
        
        echo 
    $config->getConfig(); 
    Ovviamente il mio è solo uno spunto da perfezionare.
    "Dai diamanti non nasce niente, dal letame nascon fiori."
    Fabrizio De Andrè

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    8
    Grazie per il suggerimento! Devo dire che stavo gia' pensando di fare esattamente quello che hai proposto tu e sono contento di avere una conferma della adeguatezza della soluzione

  8. #8
    Utente di HTML.it L'avatar di Secta
    Registrato dal
    May 2002
    Messaggi
    365
    Ti conviene fare cosi essenzialmente per due motivi: 1) puoi aggiungere quante classi vuoi... db, xml, ini, yaml, etc etc... e 2) elimini qualsiasi dipendenza all'interno di QWConfiguration
    "Dai diamanti non nasce niente, dal letame nascon fiori."
    Fabrizio De Andrè

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.