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?
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?
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.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
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...
A me global e $GLOBALS funzionano perfettamente:
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à.Codice PHP:
<?php
$variabile = 'ciao';
class Prova
{
public function invia(){
echo $variabile;
global $variabile;
echo $variabile;
echo $GLOBALS['variabile'];
}
}
$p = new Prova();
$p->invia();
?>
Passi l'oggetto nel costruttore ieOriginariamente 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...
Codice PHP:
<?php
class A{
protected $mysqli= null;
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