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

  • Автор темы Автор темы Fakir
  • Дата начала Дата начала

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) в методах классов.
 
На сколько я осознаю, в соответствии с идеологией ООП правильней создать класс для инкапсулирования глобального окружения,
а затем обращаться только к нему.

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

Nirva, а пояснить не затруднит?
 
Fakir - использование глобальных переменных очень усложняет отладку приложения другим программистом.
 
BeGe, опять же, частный случай. Если приложение делается только для себя.

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

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