2009-12-18 10 views
5

Ciò dovrebbe essere ovvio, ma mi sto confondendo un po 'con l'ambito delle variabili PHP.Variabile globale all'interno di un costruttore con PHP

Ho una variabile all'interno di una funzione di costruzione, che desidero utilizzare successivamente in una funzione della stessa classe. Il mio metodo attuale è questa:

<?php 

class Log(){ 

    function Log(){ 
     $_ENV['access'] = true; 
    } 

    function test(){ 
     $access = $ENV['access']; 
    } 

} 

?> 

C'è un modo migliore per farlo che abusare di variabili d'ambiente? Grazie.

risposta

17

Si potrebbe utilizzare una variabile di classe, che ha un contesto di ... una classe:
(Esempio per PHP 5, naturalmente; ho riscritto alcune cose in modo che il codice è più PHP5- compliant)

class Log { 
    // Declaration of the propery 
    protected $_myVar; 

    public function __construct() { 
     // The property is accessed via $this->nameOfTheProperty : 
     $this->_myVar = true; 
    } 

    public function test() { 
     // Once the property has been set in the constructor, it keeps its value for the whole object : 
     $access = $this->_myVar; 
    } 

} 

Si dovrebbe dare un'occhiata a:

+1

Non penso che il() dopo la classe sia valido ...? – SeanJA

+1

@SeanJA: oh sì, certo, hai ragione; Non ho visto quelli quando ho copiato il codice dall'OP ;; grazie per la tua nota! –

+0

Ya, l'ho perso anche io quando lo stavo incollando nel mio ... – SeanJA

0

È possibile utilizzare la parola chiave globale:

class Log{ 
    protected $access; 
    function Log(){ 
     global $access; 
     $this->access = &$access; 
    } 
} 

Ma si dovrebbe davvero essere passando la variabile nel costruttore:

class Log{ 
    protected $access; 
    function Log($access){ 
     $this->access = &$access; 
    } 
    //...Then you have access to the access variable throughout the class: 
    function test(){ 
     echo $this->access; 
    } 
} 
+1

-1 per cosa? Voleva una variabile globale. – SeanJA

+0

Log() dovrebbe essere __construct() ed entrambi i metodi mancheranno la parola chiave pubblica. – Gordon

+0

A meno che tu non voglia essere compatibile con php 4 ... allora sarebbe log() – SeanJA

3

Globali sono considerati dannosi. Se si tratta di una dipendenza esterna, passarla attraverso il costruttore e salvarla all'interno di una proprietà per un uso successivo. Se è necessario impostarlo solo durante la chiamata da testare, è consigliabile prendere in considerazione la possibilità di renderlo un argomento a tale metodo.

+0

Questo è quello che ho detto con un esempio, -1 per me! – SeanJA