Использование глобальных массивов в методах класса

Fakir

в работе над собой
Использование глобальных массивов в методах класса

Не знаю почему, но вот подумалось.

Я частенько прибегаю к такой конструкции:


PHP:
class classFirst {
  function getPrice() {
    return '55';
  }
}

class classSecond {
  var $curPrice;
  function setPrice() {
    $this->curPrice = $GLOBALS['clSecond']->getPrice();
  }
}

$clFirst = new classFirst();
$clSecond = new classSecond();

echo $clSecond->setPrice();
Правильно ли это? Имеет право жить?

Я имею ввиду использование глобального массива ($GLOBALS) в методах классов.
 

Nimous

Guest
На сколько я осознаю, в соответствии с идеологией ООП правильней создать класс для инкапсулирования глобального окружения,
а затем обращаться только к нему.

Кроме идеологии, это ещё и гораздо удобней.
Что если тебе придёт в голову переименовать $GLOBALS['clSecond'] в $GLOBALS['clSecond1']? Будешь ВСЁ переписывать?
 

Nirva

Dmitry Polyakov
нет, неправильно.
делегировать надо. ну и пример конечно некорректен.
 

Fakir

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

Nirva, а пояснить не затруднит?
 

BeGe

Вождь Апачей, блин (c)
Fakir - использование глобальных переменных очень усложняет отладку приложения другим программистом.
 

Fakir

в работе над собой
BeGe, опять же, частный случай. Если приложение делается только для себя.

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

ForJest

- свежая кровь
Fakir
Ты не видишь, потому что то что ты делаешь это не ООП.
Это процедурный подход, по сути.
Твой код выполняет несные функции вообще.
setPrice, по моим ожиданиям должен получать аргумент.
$obj-> setPrice(55);
Допустим у тебя есть для этого класс. Так сделай
$obj-> setPrice(GLOBALS['clSecond']->getPrice());
Кстати в твоём примере - ошибка. :).
Пожалуйста в следующий раз потрудись хотя бы выполнить свой код :).
------------------------
Почитай в http://phpclub.ru/detail/magazine/2005/08/
Влияние TDD на дизайн кода, может просветит тебя хоть чуть-чуть :)
 

svetasmirnova

маленький монстрик
>Это процедурный подход, по сути.
Мне всегда казалось. что процедуры изобрели в том числе для пресловутого повторного использования. А этот код write only.
 

Nirva

Dmitry Polyakov
предлагаю почитать буча. фактически святая библия.
 

BeGe

Вождь Апачей, блин (c)
Fakir частный случай код чата chat.spb.ru .... очень сложно с ним работать....
ярко выраженный процедурный подход, но вот функции которая делает авторизацю пользователя нету, есть куча функций которые выполняют проверки.. и один глобальный массив, которые где-то изменился... и ты находишь только место где вылетает ошибка, а место где была изменена эта пременная найти не возможно.

Так что глобальные переменны - это только переменные настройки, конфига, но для этого есть define.
 
Сверху