Программирование классами

x-yuri

Новичок
И это тоже. Делать надо правильно. Всегда можно делать криво и зачастую нужно но либо ВЫНУЖДЕННО либо от лени но тогда не надо об этом кричать на углу
да я в общем-то согласен с тобой, просто правильно - посередине между "лень" и "паранойя" (http://tinyurl.com/bcy23), имхо

А я вот напишу через какое-то время очень хорошую заметку насчет этого почитаешь
интересно... а где ее можно будет найти?
 

AmdY

Пью пиво
Команда форума
Автор оригинала: cDLEON
Во, херня какая, заменить название своей переменной.
Это, что ли через Find->Replace заменять $_GLOBALS['config'] на $_GLOBALS['my_config'] во всех местах, где эта переменная используется?
А если я ещё одну библиотеку скачаю, а там юзается my_config ? :D Опять заменять ? Бугага))
ага, уже давно придумали константы, мона
$_GLOBALS[MYCMS_CONFIG] или лучше $_GLOBALS[Mycms::CONFIG_INDEX]
Хотя - в своих проектах я вообще отказался от синглтонов.
Передаю параметры в конструктор. И чувствую себя молодым 8)
одно шило на другое, можно ещё и _только_ registry?

как же я рад, что не одолел ни фаулера, ни четвёрку в своё время и привык делать как мне удобно в первую очередь.
 

cDLEON

Онанист РНРСlub
одно шило на другое, можно ещё и _только_ registry?

как же я рад, что не одолел ни фаулера, ни четвёрку в своё время и привык делать как мне удобно в первую очередь.
Регистр мало чем отличается от глобалов - его я тоже не использую.
как мне удобно в первую очередь.
Я тоже фаулера не читал. Но основы понял. Раньше точно так же скептично смотрел на ООП, кстати 8)
Но...Когда я понял весь смысл, я больше не могу мыслить процедурами :( Во-первых скучно, во-вторых не удобно, в-тритьих не расширяемо обсалютно+запутано....
 

HraKK

Мудак
Команда форума
как же я рад, что не одолел ни фаулера, ни четвёрку в своё время и привык делать как мне удобно в первую очередь.
После того как ты их не прочитаешь, а поймешь тебе станет удобно делать правильно и ты поймешь что раньше занималься фигней.
 

whirlwind

TDD infected, paranoid
Очень забавный топик, продолжайте

ЗЫ. Вот эти споры извечные про сингелтоны... Кто нибудь может сказать - пользователю сингелтона есть какая нибудь разница сколько экземпляров сингелтона существует? По моему абсолютно никакой. 99% местных вопросов просто отпадут, если принять за правило, что инстанцированием занимаются только фабрики.
 

AmdY

Пью пиво
Команда форума
Автор оригинала: HraKK
После того как ты их не прочитаешь, а поймешь тебе станет удобно делать правильно и ты поймешь что раньше занималься фигней.
я вымучал как-то половину, но озарение не снизошло, даже наоборот. начал ставить извращённые эксперименты.
 

HraKK

Мудак
Команда форума
Это первая стадия, у меня так же была =) Не понимал нафиг, материл, делал как мне удобно но потом... =)
 

AmdY

Пью пиво
Команда форума
я понял, просто я это уже знал и дошёл до этого по большей части практическим путём, а читать начал только думая. что можно как-то лучше и удобнее делать.
мне в своё время повезло с работой и тем, что я её выбирал не по зарплате, а по уровню тех. директора.
 

HraKK

Мудак
Команда форума
А я до всего дошел в голове не писал ничего год( так сложилось), не читал ничего кроме пхпклаба, а просто как-то разбышлял и осенило как Ньютона) Возможно осмыслил за это время все что читал раньше.
 

Netman

Новичок
Всем огромное спасибо за помощь, сижу читаю мануалы (особенно понравилась ссылка про «Управление зависимостями в PHP-коде»). Для начала конечно сложновато, но а кому сегодня легко.

Как я понял, одной из основных целей, к которой нужно стремиться, это независимость классов друг от друга. Соответственно возникает следующий вопрос, до какой степени стоит делать класс независимым? Взять к примеру два варианта кода
PHP:
class system{

   var $core_config;
   var $tpl;

   function __construct($core_config,$tpl){
      $this->core_config = $core_config;
      $this->tpl = $tpl;
   }

   function check_work(){

      if($this->core_config->system_work == 0){

         $this->tpl->loadTpl('/offline.tpl');
         echo $this->tpl -> compile();
         die();}
   }

}

$system = new system($config,$tpl);
$system -> check_work();
Здесь весь функционал находится внутри класса, с одной стороны удобно, что можно просто вызвать функцию проверки и как говориться дело в шляпе. Но тогда класс начинает завесить от класса шаблонов.

PHP:
class system{

   var $core_config;

   function __construct($core_config,$tpl){
      $this->core_config = $core_config;
   }

   function check_work(){

      if($this->core_config->system_work == 1){
         return 1;
      }
   }

}

$system = new system($config);

if(!$system -> check_work()){
   $tpl -> loadTpl('/offline.tpl');
   echo $tpl -> compile();
   die();
}
Во данном варианте класс менее функционален, но и менее зависим. В больших проектах, к сожалению не учувствовал, поэтому и интересно как лучше делать на практике.
 

Духовность™

Продвинутый новичок
до какой степени стоит делать класс независимым?
до степени, называемой "без излишнего фанатизма". Лично у меня системные классы так или иначе завязаны на архитектуре системы и это нормально, ИМХО. А вот частные классы типа пользователь, база данных, какашка, лучше делать максимально "независимыми".
 

Lightning

Трудоголик
Здесь весь функционал находится внутри класса, с одной стороны удобно, что можно просто вызвать функцию проверки и как говориться дело в шляпе. Но тогда класс начинает завесить от класса шаблонов.
Нет. В этом случае System не зависит от класса шаблонов, т.к. он использует интерфейс, а о том с объектом какого именно класса работает он не знает.
 

x-yuri

Новичок
Как я понял, одной из основных целей, к которой нужно стремиться, это независимость классов друг от друга. Соответственно возникает следующий вопрос, до какой степени стоит делать класс независимым?
надо просто определиться чего ты хочешь, потом подумать какие есть варианты и, учитывая их плюсы и минусы, выбрать наиболее подходящий в данной ситуации
Вот тебе класс system зачем? Какие он обязанности должен выполнять

-~{}~ 11.03.09 23:01:

Нет. В этом случае System не зависит от класса шаблонов, т.к. он использует интерфейс, а о том с объектом какого именно класса работает он не знает
скажем так, это динамическая зависимость. Статическая:
PHP:
   function __construct(){ 
      $this->tpl = Templates::get(); 
   }
Для модульного тестирования динамические зависимости, лучше статических
 

Димон

Новичок
А ведь чел просто спросил как передавать данные между классами :))))

Любители глобалсов и спагетти, смотрите зенд фреймворк, как пример хорошей архитектуры. Надо писать не так как нравится, а так как надо. Как проверено, правильно и надежно. А спор на эту тему возникает, потому что лежат фрилансеры на диване, которые в жизни в команде не работали и плодят свои мега-труды. (Фрилансеры, которые работали в команде, думаю, так не делают).

------
И почему в пыхе нет оператора goto? Вот было бы раздолье... :))
 

AmdY

Пью пиво
Команда форума
Димон
а в zf разве нет "спагетти"? ;) могу рассказать как пишут в команде на zf, но не при людях, там сплошной мат. кроме знания одних божественных правил, нужно их ещё уметь применять и применять там где это надо.

p.s. goto будет
 

fixxxer

К.О.
Партнер клуба
ZF конечно далеко не идеал, но я прекрасно представляю реакцию похапе-говнокодеров на "а вот теперь мы пишем на ZF". Конечно ниасиливают и изрыгают проклятия, хотя уместнее было бы просто самим убиться об стену.
 

AmdY

Пью пиво
Команда форума
fixxxer
хуже, они пытаются его "довести до ума", и продолжают параметры передавать гетом, а письмо отсылать функцией mail, формируя заголовки ручками и т.д.
 

Lightning

Трудоголик
скажем так, это динамическая зависимость. Статическая:
PHP:
   function __construct(){ 
      $this->tpl = Templates::get(); 
   }
Или так:
PHP:
   function __construct(){ 
      $this->tpl = new Template('tpl1.php'); 
   }
-~{}~ 12.03.09 23:59:

Надо писать не так как нравится, а так как надо.
Достаточно пару раз "наступить на грабли", чтобы понравилось писать так как надо )
 

Netman

Новичок
А кто что думает по поводу Limb Toolkit? на данный момент, данное решение мне понравилось больше всего.
 
Сверху