Глобальная переменная внутри конструктора с PHP - PullRequest
6 голосов
/ 18 декабря 2009

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

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

<?php

class Log(){

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

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

}

?>

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

Ответы [ 3 ]

18 голосов
/ 18 декабря 2009

Вы можете использовать переменную класса, которая имеет контекст ... класса:
(пример для 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;
   }

}

Вы должны взглянуть на:

3 голосов
/ 18 декабря 2009

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

0 голосов
/ 18 декабря 2009

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

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...