Глобальная переменная внутри конструктора с PHP


Это должно быть очевидно, но я немного запутываюсь в области видимости переменных PHP.

У меня есть переменная внутри конструктора, которую я хочу использовать позже в функции того же класса. Мой текущий метод таков:

<?php

class Log(){

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

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

}

?>

Есть ли лучший способ сделать это, чем злоупотреблять переменными среды? Спасибо.

Author: Gordon, 2009-12-18

3 answers

Вы могли бы использовать переменную класса, которая имеет контекст... класса :
( Пример для PHP 5, конечно; Я переписал несколько вещей, чтобы ваш код был более совместим с PHP5)

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

}

Вам следует взглянуть на:

 18
Author: Pascal MARTIN, 2009-12-18 12:16:23

Глобалы считаются вредными. Если это внешняя зависимость, передайте ее через конструктор и сохраните внутри свойства для последующего использования. Если вам нужно, чтобы это было установлено только во время вызова для тестирования, вы можете рассмотреть возможность сделать это аргументом для этого метода.

 3
Author: Gordon, 2009-12-18 12:26:56

Вы можете использовать ключевое слово global:

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

Но вы действительно должны передавать переменную в конструкторе:

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;
    }
}
 0
Author: SeanJA, 2009-12-18 12:26:24