LINUX.ORG.RU

[PHP] Почему использование глобальной переменной $DB считается дурным тоном?

 


0

2

И предлагают воспользоваться паттерном Синглетон? По мне так гораздо проще в начале каждой функции где идёт обращение к БД написать global $DB и обращаться к ней напрямую, чем в конструкторе объекта получать ссылку на объект базы данных и продираться к базе через длиннючие цепочки $this->db->...


Мне кажется потому, что объекты должны быть максимально независимы, и всё их общение с внешним миром должно ограничиваться паблик методами. А для их применения должно быть достаточно ознакомиться с этими самыми методами. А при использовании глобальной переменной нужно ещё узнать, что она нужна, создать её с таким же именем в своём проекте и т.п.

avol
()

Если это домашний сайт Васисуалия Петровича Пупкина о трёх страничках - возможно, так проще. Но если проект крупный и пишется несколькими людьми - то нет.

maxkit
()
Ответ на: комментарий от maxkit

> Если это домашний сайт Васисуалия Петровича Пупкина о трёх страничках - возможно, так проще. Но если проект крупный и пишется несколькими людьми - то нет.

А в чём проблема будет?

fedyan
() автор топика
Ответ на: комментарий от fedyan

плюс еще можно организовать «ленивую загрузку» и пока соединение с БД не нужно - оно и не будет организовываться. Тоже плюс.

OldFornit
()
Ответ на: комментарий от OldFornit

А можно даже пул соединений организовывать. Типа, если к той же БД из другого места запрос будет, то можно заново не соединяться.

...

Но главное тут - именно то, что глобальные переменные - чисто зло :) Слишком много сайд-эффектов в больших проектах.

KRoN73 ★★★★★
()

Нет, почему, использование глобальных переменных - это абсолютно нормально. Более того, надо все переменные делать в глобальной области, потому что если в каждой функции делать свои переменные, это будет расходовать память. Имена переменных не должны быть длиннее одной буквы, тоже в целях экономии памяти и увеличения скорости. И одни и те же переменные следует использовать многократно из разных функций для абсолютно разных целей - это позволит сократить кол-во переменных в проекте до 10-15 штук. Удачи, юный перспективный программист, и да сопутствует тебе успех!

heisenberg ★★
()
Ответ на: комментарий от KRoN73

не.. пул соединений лучше создавать не на стороне языка, а чем-то вроде PgBouncer.

OldFornit
()

Синглтон - это тоже глобальный объект. И надо понимать, что глобальная переменная $DB это не тоже самое, что глобальная переменная $counter. Так что в небольшом проекте вполне допустимо. А для более серьезных таки да, уж лучше абстрагироваться.

dizza ★★★★★
()

лучше использовать инверсию зависимостей а не singleton,
constructor injection это хорошо но есть и другие способы..

trashymichael ★★★
()
Ответ на: комментарий от trashymichael

тоесть, например
$db = Registry::get('db')
мало чем отличается от
global $db
а гибкости уже поболе
но от рук тоже многое зависит
если тебе это не нужно то зачем парится и переспрашивать? делай как знаешь, заставляют чтоли?

trashymichael ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.