2009-12-18 11 views
5

Esto debería ser obvio, pero estoy un poco confundido acerca del alcance variable de PHP.Variable global dentro de un constructor con PHP

Tengo una variable dentro de un Constructor, que luego quiero usar en una función de la misma clase. Mi método actual es el siguiente:

<?php 

class Log(){ 

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

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

} 

?> 

¿Existe una forma mejor de hacer esto que abusar de las variables de entorno? Gracias.

Respuesta

17

Se puede usar una variable de clase, que tiene un contexto de una clase ...:
(Ejemplo para PHP 5, por supuesto, he vuelto a escribir algunas cosas para que su código es más php5- compatible)

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; 
    } 

} 

Usted debe echar un vistazo a:

+1

No creo que() después de la clase sea válida ...? – SeanJA

+1

@SeanJA: oh sí, por supuesto, tienes razón; No los vi cuando copié y pegué el código del OP; gracias por tu nota! –

+0

Ya, también me lo perdí cuando lo estaba pegando en el mío ... – SeanJA

0

Se puede utilizar la palabra clave mundial:

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

Pero que realmente debería estar pasando la variable en el constructor:

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 ¿para qué? Él quería una variable global. – SeanJA

+0

Log() debe ser __construct() y ambos métodos pierden la palabra clave public. – Gordon

+0

A menos que quiera ser compatible con php 4 también ... entonces sería log() – SeanJA

3

Globals se consideran perjudiciales. Si se trata de una dependencia externa, páselo por el constructor y guárdalo dentro de una propiedad para usarlo más adelante. Si necesita que esto se establezca solo durante la llamada a prueba, es posible que desee considerar convertirlo en un argumento para ese método.

+0

Eso es lo que dije con un ejemplo, -1 ¡para mí! – SeanJA

Cuestiones relacionadas