Маленький, конкретезированный вопрос по ООП.

Статус
В этой теме нельзя размещать новые ответы.

флоппик

promotor fidei
Команда форума
Партнер клуба
разницы, естественно, НИКАКОЙ.
А теперь представим, что на хостинге «нечаянно» включены register_globals и «нечаянно» в строку запроса попадает ?db=12
Сколько времени ты будешь искать эту ошибку?

-~{}~ 18.02.09 14:01:

Angerslave, одновнеменно, да )
 

x-yuri

Новичок
разница в том, что сингелтон - это паттерн проектирования.
а global - частная особенность языка
человек учится программировать с помощью объектов. так давайте и будем вариться в рамках ООП. Использование global, 20 раз уже говорили, это плохая практика.
triumvirat но паттерны проектирования не ограничены рамками ООП, и global ООП не противоречит. А чем в данном конкретном случае плох global? Кроме того, есть мнение, что Singleton тоже плохая практика

по поводу Object_List - автору это пока что может быть не нужно, а твой класс очень просто будет добавить

Отстой global в том, что если в одном "прекрасном" методе будет строчка global $db; $db = null;, то ты замучаешься дебажить. Пример, естественно, утрирован, но если где-то будет изменяться внутреннее состояние объекта напрямую, то геморра при поиске ошибки будет ещё больше
То что плохая практика - не спорю, но речь о конкретной ситуации. $db = null; случайно очень сложно написать. Найти такую ошибку не сложно, сложно находить ошибки, которые редко проявляются. Если речь о внутреннем состоянии, то синглтон тут не поможет - у него тоже один объект на всех с одним внутренним состоянием, которое можно менять
 

AmdY

Пью пиво
Команда форума
ничего страшного в глобалах нету, если вдруг скрипт начинает превращается в опысный при register_globals это ошибка в другом месте.
вот только я бы применял массив $GLOBALS, тогда понятно откуда ноги растут у переменной, а не магия. юзаю Registry только потому что у меня Registry::get('db') Registry::get('view') являются ленивой инициализцией, а не просто заменой $GLOBALS
 

nirex

Новичок
Все посты не прочитал, сорри если продублируюсь.
если не хочешь читать про орм читай про паттерн active record
 

Angerslave

Новичок
Если скрипт маленький, то, конечно, в глобалах ничего опасного. Но чем больше программа, тем больше внешних факторов могут воздействовать на глобальную переменную. И она перед ними беззащитна. Инкапсулированный объект же "может дать сдачи" в случае чего.
 

Духовность™

Продвинутый новичок
globals в ООП - плохая практика. Класс-сингелтон инстанцируется дефакто только по вызову. Нужен экземпляр класса - пожалуйста::бери(). А доступ к объекту через globals - это 100% инстанцирование его ПРЕЖДЕ, чем в нём есть необходимость:

PHP:
$db = new Database(); // и зачем мы это здесь вызываем, если метод GET?

class foo
{
    function run()
    {
        global $db;
        
        if (POST)
        {
              $db->query();
        }
    }
}
 

HraKK

Мудак
Команда форума
Крайне неудачный пример. В жизни вы не докажите преимущество ооп над процедурным кодом. Так что за сим, закрою.
 

StUV

Rotaredom
globals в ООП - плохая практика
глобальные переменные - это везде плохая практика, костыль, заплатка - что угодно
в любом языке, технологии и тп...

и между global и singleton не "никакая разница" - у второго преимущество в том, что есть единая точка входа к данным объекта - соответственно в случае "неконтролького слива данных" - можно отдебажить это дело в одном месте - при чем по используемому паттерну любой кодер поймет где рыть

ессно, если не применяется дебильная практика "фиксирования" синглтона в локальной области видимости класса

-~{}~ 19.02.09 20:14:

зы:
в процедкрном подходе паттерн синглтон тоже реализуется - паттерны/рефакторинг не "сам-знаете-кто" придумал и хрен знает сколько лет назад (достаточно отследить перессылки из списков литературы на научные статьи 70-х годов).
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху