Глобальная переменная внутри конструктора с PHP
Это должно быть очевидно, но я немного запутываюсь в области видимости переменных PHP.
У меня есть переменная внутри конструктора, которую я хочу использовать позже в функции того же класса. Мой текущий метод таков:
<?php
class Log(){
function Log(){
$_ENV['access'] = true;
}
function test(){
$access = $ENV['access'];
}
}
?>
Есть ли лучший способ сделать это, чем злоупотреблять переменными среды? Спасибо.
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;
}
}
Вам следует взглянуть на:
- Раздел "Классы и объекты" руководства по PHP
- И, для этого конкретного вопроса, подраздел Свойства
Глобалы считаются вредными. Если это внешняя зависимость, передайте ее через конструктор и сохраните внутри свойства для последующего использования. Если вам нужно, чтобы это было установлено только во время вызова для тестирования, вы можете рассмотреть возможность сделать это аргументом для этого метода.
Вы можете использовать ключевое слово 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;
}
}