Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Costanti al di fuori delle classi

    Salve a tutti,
    ho un piccolo problema con lo scope delle costanti.

    Praticamente io definisco delle costanti all'interno di una classe in questo modo:
    Codice PHP:
    class Config {

        
    //Configurazione dell'ambiente MySQL
        
        
    const DB_HOST 'localhost';
        const 
    DB_USER 'root';
        const 
    DB_PASSWORD '';
        const 
    DB_NAME 'nomedatabase';

    Tuttavia poi io cerco di richiamare le costanti al di fuori della classe (precisamente nel costruttore di un'altra classe) e mi sputa fuori il seguente errore:
    codice:
    Fatal error: Undefined class constant 'DB_HOST' in ....
    Per richiamarle (non istanzio nessun oggetto della classe Config) uso l'operatore di scope resolution in questo modo:
    codice:
    Config :: DB_HOST
    (senza spazi, se non li metto adesso me li trasforma in faccina)

    Dove sbaglio?

    Grazie a tutti in anticipo!

  2. #2
    Il codice deve funzionare.

    A me così funziona:

    Codice PHP:
    <?php
    class Config {

        
    //Configurazione dell'ambiente MySQL
        
        
    const DB_HOST 'localhost';
        const 
    DB_USER 'root';
        const 
    DB_PASSWORD '';
        const 
    DB_NAME 'nomedatabase';
    }

    class 
    Test {
        public function 
    __construct() {
            echo 
    Config :: DB_HOST;
        }
    }

    $c = new Test();
    ?>
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Adesso lo sto provando in locale, dopo provo a metterlo su un server e testo anche lì...è possibile che ci sia qualche impostazione del PHP.ini sballata?

  4. #4
    UPDATE:
    Ho provato a farlo girare in remoto e adesso l'errore è diverso:
    codice:
    Parse error: syntax error, unexpected T_CONST, expecting T_VARIABLE on line 11
    che corrisponde al seguente codice:
    Codice PHP:
    class Config {

        
    //Configurazione dell'ambiente MySQL
        
    const DB_HOST "localhost";
        const 
    DB_USER "root";
        const 
    DB_PASSWORD "";
        const 
    DB_NAME "creativelab";


    La linea 11 è la prima dichiarazione di const...

    Non so più dove sbattere la testa

  5. #5
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Che versione di PHP stai usando?

    Puoi postare tutto?

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  6. #6
    Originariamente inviato da neroux
    Che versione di PHP stai usando?

    Puoi postare tutto?
    Credo anch'io dipenda dalla versione di PHP.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    In locale PHP 5.4.7
    In remoto dovrebbe essere PHP 5.2.17

  8. #8
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Puoi verificare che sia 5.2 in remoto?

    Con 5 direi che debba andare .... posta tutto il codice. Oppure prova di commentare tutte le righe e poi scommenta una per una per vedere dov'è il problema.

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  9. #9
    Confermo, è PHP 5.2.17

    Il problema ho capito qual'è, ma non so proprio come risolverlo...praticamente non riesce a trovare lo scope delle costanti...

    vi posto tutte e 3 le pagine così potete fare un'analisi un po' più approfondita...

    config.php
    Codice PHP:
    <?php
    class Config {

        
    //Configurazione dell'ambiente MySQL
        
    const DB_HOST "localhost";
        const 
    DB_USER "root";
        const 
    DB_PASSWORD "";
        const 
    DB_NAME "nomedatabase";
        
        
    //Configurazione email amministratore
        //E' possibile configurare più mail aggiungendo alla lista qui sotto
        
    var $ADMIN_MAILS = array(
            
    "lalalala@lalalal.it"
        
    );
        
        static function 
    ADMIN_MAILS() { return $ADMIN_MAILS; }

    }

    ?>
    class.kernel.php
    Codice PHP:
    <?php

    include_once("config.php");

    class 
    Kernel {
        
        var 
    $db;
        
        public function 
    __construct() {
            
    $db mysql_connect(Config :: DB_HOSTConfig :: DB_USERConfig :: DB_PASSWORD);
            
    mysql_select_db($dbConfig :: DB_NAME);
            
    session_start();
        }
        
        public function 
    __destruct() {
            
    mysql_close($db);
        }
        
        
        
    //SEZIONE DEDICATA AL PANNELLO DI AMMINISTRAZIONE
        
        
    static function CheckLog() {
            if(!
    $_SESSION['log']) {
                
    Header("Location: index.php");
                die();
            }
        }
        
        static function 
    IsLogged() {
            if(
    $_SESSION['log'])
                return 
    true;
            else
                return 
    false;
        }

    }
    ?>
    index.php
    Codice PHP:
    <?php
    include_once("../includes/class.kernel.php");
    new 
    Kernel();
    Kernel :: IsLogged() ? Header("Location: menu.php") : null;
    ?>

    io lancio la index.php e mi sputa fuori l'errore:
    codice:
    Fatal error: Undefined class constant 'DB_HOST' in C:\xampp\htdocs\centum\includes\class.kernel.php on line 14

    Questo codice adesso funziona in remoto...in locale invece ancora no...perchè???

  10. #10
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Per me funziona. Guarda se includi il config.php corretto

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

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.