Global variable inside a constructor with PHP

2020-04-05 17:47发布

This should be obvious, but I'm getting a bit confused about PHP variable scope.

I have a variable inside a Constructor, which I want to use later in a function in the same class. My current method is this:

<?php

class Log(){

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

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

}

?>

Is there a better way to do this than abusing environment variables? Thanks.

标签: php oop scope
3条回答
男人必须洒脱
2楼-- · 2020-04-05 18:12

Globals are considered harmful. If this is an outside dependency, pass it through the constructor and save it inside a property for later use. If you need this to be set only during the call to test, you might want to consider making it an argument to that method.

查看更多
来,给爷笑一个
3楼-- · 2020-04-05 18:26

You could use the global keyword:

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

But you really should be passing the variable in the 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;
    }
}
查看更多
来,给爷笑一个
4楼-- · 2020-04-05 18:35

You could use a class variable, which has a context of... a class :
(Example for PHP 5, of course ; I've re-written a few things so your code is more 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;
   }

}

You should take a look at :

查看更多
登录 后发表回答