2009-12-18 6 views
5

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

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

<?php 

class Log(){ 

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

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

} 

?> 

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

ответ

17

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

} 

Вы должны смотреть на:

+1

Я не думаю, что() после класса действителен ...? – SeanJA

+1

@SeanJA: О да, конечно, вы правы; Я не видел таких, когда я копировал код из OP ;; спасибо за вашу заметку! –

+0

Я тоже пропустил это, когда я вложил его в мое ... – SeanJA

0

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

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

-1 для чего? Ему нужна глобальная переменная. – SeanJA

+0

Log() должен быть __construct(), и оба метода пропускают общедоступное ключевое слово. – Gordon

+0

Если вы не хотите быть совместимым с php 4, то ... тогда это будет log() – SeanJA

3

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

+0

Вот что я сказал с примером, -1 для меня! – SeanJA

Смежные вопросы