Классы PHP и глобальные переменные - PullRequest
0 голосов
/ 03 ноября 2011

Я недавно начал использовать классы. Я уже давно пользуюсь процедурным программированием, поэтому это было немного сложно.

Мой вопрос.

Если у меня есть такой класс:

class Example {

   public $name;
   public $whatever;
   public $yearAdded

   public function __construct($name, $whatever=NULL, $dateAdded)
   {

   some trival code here;

   }


}

Как я могу заставить $yearAdded использовать глобальную переменную, которую я установил где-то еще в другом скрипте?

ДЛЯ ПРИМЕРА:

global $currentYear = date('Y');

Должен ли я сделать это так

new example($name, $whatever, $currentTime);

или есть способ указать в классе всегда использовать $currentYear для $yearAdded.

Ответы [ 2 ]

2 голосов
/ 03 ноября 2011

Ключевое слово global работает не так, как вы думаете. Это не делает переменную глобальной областью действия. Все, что он делает, это указывает функции, которую вы вызываете, в которой вы хотите использовать переменную во внешней области видимости.

Например:

$a="test";

function something() {
    global $a;
    echo $a;  //Outputs: test
}

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

http://www.php.net/manual/en/reserved.variables.globals.php

Это не считается лучшим ООП, но выполнит работу.

0 голосов
/ 03 ноября 2011

У вас уже есть встроенная функция time(), так зачем вам домашняя глобальная переменная в вашем конструкторе?

Если вы тщательно продумаете, как вы используете глобальные переменные, вы обнаружите, что обычно есть лучшие способы доступа к одной и той же информации - например, системные переменные среды, файлы конфигурации и т. д.

...