Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di PaoDJ
    Registrato dal
    Oct 2001
    Messaggi
    273

    Variabili globali e Classi

    Ciao,

    ho questo codice:

    Codice PHP:
    <?php
    $variabile
    ='ciao';

    class 
    Prova
    {
        public function 
    invia(){
            echo 
    $variabile;
        }
    }
    ?>

    Come faccio ad accedere, all'interno di Prova::invia() alla variabile globale $variabile?

  2. #2
    Passa la variabile come parametro del metodo init().

    In alternativa (e contro ogni logica), puoi utilizzare http://www.php.net/global oppure http://www.php.net/manual/en/reserve...es.globals.php

  3. #3
    Utente di HTML.it L'avatar di PaoDJ
    Registrato dal
    Oct 2001
    Messaggi
    273
    Originariamente inviato da filippo.toso
    Passa la variabile come parametro del metodo init().

    In alternativa (e contro ogni logica), puoi utilizzare http://www.php.net/global oppure http://www.php.net/manual/en/reserve...es.globals.php
    In realtà ho semplificato l'esempio perchè la variabile da passare è l'oggetto mysqli.
    Capisci bene che non posso passare ad ogni funzione di una classe la connessione al DB, sarebbe troppo dispersivo.

    Per quanto riguarda la direttiva global e le variabili superglobali, non funziona nessuna delle due. La classe sembra avere uno scope a se...

  4. #4
    A me global e $GLOBALS funzionano perfettamente:

    Codice PHP:
    <?php 
    $variabile 
    'ciao';

    class 
    Prova
    {
        public function 
    invia(){
            echo 
    $variabile;
            global 
    $variabile;
            echo 
    $variabile;
            echo 
    $GLOBALS['variabile'];
        }
    }

    $p = new Prova();
    $p->invia();

    ?>
    Per quanto riguarda l'altro tuo problema. Anche se lo ritieni troppo dispersivo rientra nella logica della programmazione OO. In alternativa puoi utilizzare il pattern singleton oppure usare la classe DB come superclasse della tua gerarchia oppure creare una classe base che contenga una proprietà $db ed utilizzare una funzione per creare i nuovi oggetti invece che new. Tale funzione provvederà ad istanziare la nuova classe e provvedere a settare la proprietà db secondo necessità.

  5. #5
    Originariamente inviato da PaoDJ
    In realtà ho semplificato l'esempio perchè la variabile da passare è l'oggetto mysqli.
    Capisci bene che non posso passare ad ogni funzione di una classe la connessione al DB, sarebbe troppo dispersivo.

    Per quanto riguarda la direttiva global e le variabili superglobali, non funziona nessuna delle due. La classe sembra avere uno scope a se...
    Passi l'oggetto nel costruttore ie


    Codice PHP:
    <?php 
    class A
        protected 
    $mysqlinull;
        public function 
    __construct(mysqli $mysqli){ 
           
    $this->mysqli$mysqli;
        } 
        public function 
    query(){
            if (
    $result =  $this->mysqli->query("SELECT * FROM users")) {
                    
    printf("Select returned %d rows.\n"$result->num_rows);
                
    /* free result set */
                
    $result->close();
            }
        }
    }
    $mysqli = new mysqli("localhost""""""");
    $a= new A($mysqli);
    $a->query();
    ?>
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

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.