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 :: Singelton помогите разобраться до конца
А если мы будем использовать паттерн сингтон, то в обоих случаях будет 2?
Спасибо за ваши советы.
OrmaJever
Отправлено: 18 Октября, 2011 - 22:56:04
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
zdlr пишет:
А если мы будем использовать паттерн сингтон, то в обоих случаях будет 2?
нет даже с синглтоном такой вызов выведет 1 и 2. Просто с синглтоном разработчик знает что всегда будет только одна копия обьекта (ну если он самновый не создаст)
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
DeepVarvar
Отправлено: 18 Октября, 2011 - 22:58:58
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
OrmaJever пишет:
если он сам новый не создаст
Ага - getInstance ??? Тут какраз защита чтоб разраб не создал еще один.
аргумент в функции getInstance игнорируется, так как объект уже существует, при этом возвращается ссылка на объект A::$instance.
более наглядно будет так:
(Добавление)
Это чтобы не быть привязанным к имени синглтона.
Да это правильнее, но сути не меняет в данный момент.
Как сам синтаксис вызова метода использовать чтоб выдало 1 и 2?
Как быть если будут расширения класса через extends?
Ребята научите если разобрались.
DeepVarvar
Отправлено: 19 Октября, 2011 - 00:04:54
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
zdlr пишет:
чтоб выдало 1 и 2
тогда это уже не синглтон. (Добавление)
Он таки нужен для того чтобы нельзя было переопределить что-то где-то по коду далее, например не присоединитсья к другой базе или не сменить данные у юзера.
Покинул форум
Сообщений всего: 14
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
DeepVarvar пишет:
zdlr пишет:
чтоб выдало 1 и 2
тогда это уже не синглтон. (Добавление)
Он таки нужен для того чтобы нельзя было переопределить что-то где-то по коду далее, например не присоединитсья к другой базе или не сменить данные у юзера.
А выше эксперт написал:
Цитата:
нет даже с синглтоном такой вызов выведет 1 и 2.
Даже и незнаю что и сказать теперь.
Просто я для чего спрашиваю. У меня есть класс, который делает операции с данными. Берет из базы, кладет в нее. выдает выборки, обновляет и все такое. Я когда создавал дубликат класса - объект то передавал ему данные про то с чем он работает. С какими таблицами, директориями и все такое. В обычной форме я запросто делаю например:
Например так на вскидку. Что News что Feedback это расширение от класса материнского Core и передавая массив $data['news'] или $data['feedback'] им я говорим им из какой таблицы брать данные, по каким полям и все такое. Это брать берет на себя Core, а уже вывод делает метов в своем классе showAll.
Получается что если делать сингтон то получится каша?
Еще решил дописать. Чего я за этот синглтон уцепился разобраться в его работе. Иногда когда я воздаю новый объект и работаю с ним редко но пару раз мне требоволось получить доступ к свойствай другого объекта, и делал я это путем передачи одного объекта другому как параметр.
аргумент в функции getInstance игнорируется, так как объект уже существует, при этом возвращается ссылка на объект A::$instance.
более наглядно будет так:
Ваш ответ сразу не заметил, сорри. Да нет, так понятно что будет работать. Я ниже описал для чего все это затеял, что у меня есть объекты которые принимаю при создании массив с данными с чем они работают. И если $a работает с одними данными, например с таблицей и поля там какие то перечислены, а $b с другими то в случае с сингтоном они просто напросто переназначатся эти свойства класса и все? Как то я тогда не особо понимаю пользы для меня.
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
zdlr пишет:
Что News что Feedback это расширение от класса материнского Core
Зачем пальцу уметь думать?
zdlr пишет:
передачи одного объекта другому как параметр.
Нафик такие привычки - наплОдите ссылок, потом убить объект не сможете.
Стоит сделать один общий объект, какраз синглтон у меня он называется node (узел)
Он умеет загружать классы по требованию, удалять их если надо освободить память, а освобождать её стоит в любом удобном случае. Через него передаются все данные (ну сравните с чипсетом на материнке) от класса к классу.
И передавать никому никого не надо в качестве аргумента.
Это ж умереть можно сколько ссылок наплодится, слава богу сам объект не передается полностью... Хотя смотря в каком контексте - если всунете в функцию без "&" - все, будет скопирован весь объект..
Покинул форум
Сообщений всего: 14
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
DeepVarvar пишет:
zdlr пишет:
Что News что Feedback это расширение от класса материнского Core
Зачем пальцу уметь думать?
zdlr пишет:
передачи одного объекта другому как параметр.
Нафик такие привычки - наплОдите ссылок, потом убить объект не сможете.
Стоит сделать один общий объект, какраз синглтон у меня он называется node (узел)
Он умеет загружать классы по требованию, удалять их если надо освободить память, а освобождать её стоит в любом удобном случае. Через него передаются все данные (ну сравните с чипсетом на материнке) от класса к классу.
И передавать никому никого не надо в качестве аргумента.
Это ж умереть можно сколько ссылок наплодится, слава богу сам объект не передается полностью... Хотя смотря в каком контексте - если всунете в функцию без "&" - все, будет скопирован весь объект..
Я и говорю что не считаю правильно передавать объект как параметр. По поводу "Зачем пальцу уметь думать?" не сильно понял, можно ли поподробнее?
Спасибо за советы.
DeepVarvar
Отправлено: 19 Октября, 2011 - 02:06:12
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
С чего вы взяли что какой-то там класс, который занимается только выводом новостей, должен быть потомком от класса БД?
Он же жить без папы не сможет, а папа будет полностью привязан к детям..
Т.е. если вы у папы измените имена методов, или допишите еще пару методов - вам придется ковырять и все классы являющиеся от него зависимыми.
Вызываются то в них не личные методы, а методы родителя.
На*** оно такое нужно?
Покинул форум
Сообщений всего: 14
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
DeepVarvar пишет:
С чего вы взяли что какой-то там класс, который занимается только выводом новостей, должен быть потомком от класса БД?
Он же жить без папы не сможет, а папа будет полностью привязан к детям..
Т.е. если вы у папы измените имена методов, или допишите еще пару методов - вам придется ковырять и все классы являющиеся от него зависимыми.
Вызываются то в них не личные методы, а методы родителя.
На*** оно такое нужно?
Правильно говорите. Для того форум и есть. Я понял о чем вы говорите. А как тогда правильно писать? Если например у меня Core имеет метод Get($id) и по нему отдает елемент, то как грамотно писать если в новостях мне не делать Get($id) и для чего тогда пишутся extends?
Спасибо за ваши советы.
caballero
Отправлено: 19 Октября, 2011 - 02:55:08
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Как то я тогда не особо понимаю пользы для меня
Никакой пользы поэтому и длинная дискуссия ни о чем
В подавляющем числе случаев синглетон применяется для коннекта к базе чтобы с глобальнысм переменными не возится. Другого применения не так много, во всяком случае в PHP
Цитата:
если всунете в функцию без "&" - все, будет скопирован весь объект
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.