Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: PDO внутри функции [2]
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
DelphinPRO пишет:
ну его нафиг, этот холивар про плохой глобал, тыщу раз все уже обсосано
Ты не ответил на два следующих вопроса.
И я не видел чтобы этот вопрос обсасывали вот в таком свете.
Обычно это заканчивалось а-ля: "ну лаадно, глобал это плоохо..."
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
DeepVarvar пишет:
Ты не ответил на два следующих вопроса.
блин.
>> 2) Почему разрабы пыха считают иначе чем "пыхо-глобало-хейтеры"? пока не считают
мне бабушка рассказывала, что в пыхе когда-то и regicter_globals был и всем нравился.
ps. к хейтерам себя не отношу. иногда код с глобальными переменными проще. но проблемы такого кода всем известны - связанность, сложности при тестировании и т.д. сами все знаете...
>> 3) Кто конкретно первым сказал фразу "глобал это плохо"? Ато очень похоже на байку "если ты это сообщение не напишешь десяти людям у тебя умрет мама".
Ну данное исследование проводить у меня нет желания. особенно сейчас перед сном
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
DeepVarvar пишет:
Не надо путать глобал скоп и суперглобал.
я не путаю. просто аналогия. две ненужные вещи в языке. (Добавление)
берем хороший фрейм - симфонию - не находим не одного глобала.
Берем какое-нибудь говно, например битрикс - глоабал на глобале и глобалом погоняет.
совпадение? не думаю.
не глобалом единым конечно такая репутация заслужена, но и им в том числе. (Добавление)
короче, в серьезном проекте глобальные переменные - зло.
думаю и в сях вы тоже стараетесь как-то структурировать код, а не засираете все вокруг глобальными переменными...
----- Чем больше узнаю, тем больше я не знаю.
DeepVarvar
Отправлено: 02 Декабря, 2015 - 08:39:13
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
DelphinPRO пишет:
просто аналогия. две ненужные вещи в языке
Ты не раскрыл что имелось ввиду, хотя я догадываюсь ))
DelphinPRO пишет:
берем хороший фрейм - симфонию - не находим не одного глобала
И там сплошь и рядом глобальные хранилища-фабрики и прочая статичная шушера.
DelphinPRO пишет:
в серьезном проекте глобальные переменные - зло
С учетом предыдущей фразы -- насмешил. Конфиги у тебя глобальны? Да. Коннект глобальный? Да. Ф-ции глобальны? Да ))
А потом вы такие советуете:
Цитата:
function GetUser(\PDO $db, $user_id)
Передавай в каждый чих аргумент, даже если там пять вложений до вызова. И чел такой в шоке:
Рачей пишет:
не понял, ее в каждом запросе туда надо передавать
Да, дорогой, мучайся, не пиши слово глобал, это зло. Почему? А хз. Так все говорят и я говорю и тебе тоже так говорить надо.
DelphinPRO пишет:
не засираете все вокруг глобальными переменными
Неправда. В глобальный скоп всегда что-то кладется, если проект серьезнее хелловорда. А в сях не делают какие-то обертки в виде ф-ций/методов возвращающих значение, как, например, в пыхе для получения состояния или конфига. А если кто-то щас пукнет про то что в плюсах все-же делают какие-то обертки, то там сам синтаксис "заставляет" (в кавычках потому что не заставляет по факту).
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Давай не путать понятия глобального контекста вообще и глобальной переменной в частности.
Конфиг у меня глобален. Но доступ к нему я получаю, к примеру, через статический метод класса, для изменения значений тоже имею заданные интерфейсы. Я не затру случайно глобальную переменную $config, я не забуду о ее существовании, потому что ее не существует. Я не буду полчаса искать неведомую ошибку, возникшую из-за невнимательности, потому что конфиг хоть и в глобальном контексте, но это не глобальная переменная (по этой же причине я не люблю паттерн Registry, в такое хранилище тоже можно насрать что угодно).
Да, советовал передавать $db в функцию. Так код читаеемее и надежнее по крайней мере. Я вижу что $db - это экземпляр PDO, а не неведомая глобальная хрень.
----- Чем больше узнаю, тем больше я не знаю.
DeepVarvar
Отправлено: 03 Декабря, 2015 - 07:42:18
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
DelphinPRO пишет:
Давай не путать понятия глобального контекста вообще и глобальной переменной в частности
Масло масляное, (ниже поясню).
DelphinPRO пишет:
Конфиг
DelphinPRO пишет:
$config
DelphinPRO пишет:
конфиг
Что ж ты за конфиг зацепился?
Хороший пример для аргументации?
Ни капельки, т.к. все что ты тут расписал относится к инкапсуляции, которая вдогонку, посредством статики, обеспечила глобальный доступ.
DelphinPRO пишет:
Да, советовал передавать $db в функцию
Да, глобал это плохо, чож вы им пользуетесь? ))
Почему не передаёте в каждый аргумент каждого метода экземпляр конфига с приватными св-вами и геттерами-сеттерами?
Если вернуться к самому первому моему сообщению:
DeepVarvar пишет:
И пусть пишет global -- это гораздо правильнее (в контексте, да, он их не знает, но все же классов, их области видимости и инкапсуляции) чем тупоголовая передача параметров.
При рефакторе будет легче поудалять кучу глобалов и понатыкать $this, чем перепиливать апи с кол-вом и порядком аргументов.
Да я врагу такого не пожелаю.
А если там будет не пдо, не экземпляр по ссылке, а массив (копируй меня полностью!)?
А если там несколько аргументов и на каждом уровне вызова разное число аргументов?
А если эти ф-ции используются по всему проекту?
Сколько он рефакторить это все будет? (Добавление)
DelphinPRO пишет:
Я не затру случайно
DelphinPRO пишет:
я не забуду
Так это личная проблема, а не проблема кода.
Зачем вносить личные проблемы в архитектуру приложения?
Как говорил Мелкий: затер что-то в конфиге? Это ошибка разработки.
Ты же не на боевом сервере все это правишь.
Ну исправишь и дальше поедешь.
Ты еще скажи что код без вспомогательного инструмента (IDE) писать нельзя.
Что ж это за код такой?
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Дип, покажи мне пример реального кода, где global необходим (или значительно упрощает код) и используется. Желательно, чтобы это был популярный опенсорс проект.
----- Чем больше узнаю, тем больше я не знаю.
DeepVarvar
Отправлено: 03 Декабря, 2015 - 08:55:37
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Тебе слово global сгрепать или показать аналогичное поведение?
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
ну мы же о global говорим.
по остальному:
DeepVarvar пишет:
Что ж ты за конфиг зацепился?
ты сам его предложил в качестве примера.
DeepVarvar пишет:
Ни капельки, т.к. все что ты тут расписал относится к инкапсуляции, которая вдогонку, посредством статики, обеспечила глобальный доступ.
Да. И это избавило меня от глобальной переменной, которая нафиг не нужна.
И если уж говорить о проблеме ТС - коннект к базе тоже следует сделать глобальным "посредством статики", однако я посоветовал передачу параметром предполагая, что так ему будет проще. В любом случае цель - избавление от глобальной переменной.
DeepVarvar пишет:
Да я врагу такого не пожелаю.
Твой пример притянут за уши, так никто не пишет. Давай более реальное что-то.
DeepVarvar пишет:
Так это личная проблема, а не проблема кода.
Согласен. Но хороший код избавит и от некоторых "личных" проблем. (Добавление)
DeepVarvar пишет:
При рефакторе будет легче поудалять кучу глобалов и понатыкать $this, чем перепиливать апи с кол-вом и порядком аргументов.
Тут я тоже не соглашусь. Чисто механической работы по переписыванию будет не меньше.
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
DeepVarvar пишет:
посредством костыля global.
костыля!!
Всё, спор дошел до логического завершения
----- Чем больше узнаю, тем больше я не знаю.
DeepVarvar
Отправлено: 03 Декабря, 2015 - 11:58:23
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
DelphinPRO пишет:
Всё, спор дошел до логического завершения
))
В таком случае, что мешает называть глобальную доступность статического метода в классе костылем?
Что мешает называть глобальную доступность обычной ф-ции костылем?
Почему для ф-ций глобальность работает, а для переменных -- нет?
Как ты объяснишь это?
Я назвал глобал костылем только потому, что изначально, область видимости в пыхе такова, что без глобала ты не добьешься желаемых результатов, когда речь идет о ФП.
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Вот привязался-то...
Каких еще желаемых результатов? Х*як-х*як и в продакшн? Нужно писать так, чтобы необходимости в глобале не возникало.
Передавая параметр в функцию, мы имеем простейший пример внедрения зависимости. При написании юнит-теста для этой функции, мы запросто можем сунуть туда заглушку, а не затрагивая базу (речь о примере выше с PDO, но общая суть думаю понятна). А что мы будем делать с глобальными переменными? А если нам нужно протестировать функцию на нескольких наборах данных?
И не важно, правильная в php область видимости для переменных или через костыль. Не нужны они, глобальные переменные.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.