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]
будут вести на один и тот же объект, а один и тот же объект будет отдавать одно и то же
Вам нужна фабрика (http://www[dot]javenue[dot]info/post/17 или любая другая ссылка из яндекса по запросу "паттерн фабрика"). Почитайте про ООП и паттерны проектирования, у вас в голове явно каша
ps
Объекты для того и создаются что бы их передавать в методы других классов, при ООП-программировании не нормально этого не делать.
zdlr
Отправлено: 19 Октября, 2011 - 12:26:46
Новичок
Покинул форум
Сообщений всего: 14
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
Stierus пишет:
Цитата:
Хотя смотря в каком контексте - если всунете в функцию без "&" - все, будет скопирован весь объект..
Объекты по умолчанию передаются по ссылкам, если вам нужно копирование - надо вручную клонировать.
По поводу синглтона - он вам не нужен Синглтон - это средство ограничить количество экземпляров класса. Он ровно 1 , поэтому
будут вести на один и тот же объект, а один и тот же объект будет отдавать одно и то же
Вам нужна фабрика (http://www[dot]javenue[dot]info/post/17 или любая другая ссылка из яндекса по запросу "паттерн фабрика"). Почитайте про ООП и паттерны проектирования, у вас в голове явно каша
ps
Объекты для того и создаются что бы их передавать в методы других классов, при ООП-программировании не нормально этого не делать.
Спасибо за советы я ко всем прислушаюсь. Для того и пришел на форум, так как иначе спросить неукого, свою правоту я не собираюсь доказывать, так как сам не все до конца понимаю правильно.
Теперь мне про сингтон стало все на свои места. Уже третий раз встречаю что его более используют при конекте к базе данных что я у себя прослежу и перепишу.
Конечно у меня есть каша в понимании всего ООП. Хотя я и написал довольно большую работу на нем, но все же мне некоторые моменты непонятно. Все что я читал по ООП это только по сути мануал на PHP.net
Цитата:
Объекты для того и создаются что бы их передавать в методы других классов, при ООП-программировании не нормально этого не делать.
То есть если я вас правильно понял контрукция что я писал выше:
Если еще можно, подскажите еще момент, вот тут в теме мне написали:
Цитата:
С чего вы взяли что какой-то там класс, который занимается только выводом новостей, должен быть потомком от класса БД?
Он же жить без папы не сможет, а папа будет полностью привязан к детям..
Т.е. если вы у папы измените имена методов, или допишите еще пару методов - вам придется ковырять и все классы являющиеся от него зависимыми.
Вызываются то в них не личные методы, а методы родителя.
На*** оно такое нужно?
Мне немного непонятно для чего тогда пишутся extends классы? Неужели я в главном классе Core не могу создать метод Get($id) и по нему не запрашивать из базы данных данные.
Тогда класс News extends Core - почему я в нем не могу использовать Get()?
Спасибо за ваше время.
caballero
Отправлено: 19 Октября, 2011 - 13:09:25
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Почитайте про ООП и паттерны проектирования, у вас в голове явно каша
как только полезет в нафиг ему не нужные паттерны каши станет еще больше.
Цитата:
Мне немного непонятно для чего тогда пишутся extends классы? Неужели я в главном классе Core не могу создать метод Get($id) и по нему не запрашивать из базы данных данные.
Код пишется для того чтобы реализовать нужную бизнес логику а не для того чтобы применить наследование синглетон или какой нибудь паттерн.
Покинул форум
Сообщений всего: 14
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
caballero пишет:
Цитата:
Почитайте про ООП и паттерны проектирования, у вас в голове явно каша
как только полезет в нафиг ему не нужные паттерны каши станет еще больше.
Цитата:
Мне немного непонятно для чего тогда пишутся extends классы? Неужели я в главном классе Core не могу создать метод Get($id) и по нему не запрашивать из базы данных данные.
Код пишется для того чтобы реализовать нужную бизнес логику а не для того чтобы применить наследование синглетон или какой нибудь паттерн.
Нет нет, я уже как бы хочу отвлечься в разговоре про синглтоны и паттерны. Пока оставим их.
Я просто написал что мне непонятно что мне посоветовали а именно:
Цитата:
С чего вы взяли что какой-то там класс, который занимается только выводом новостей, должен быть потомком от класса БД?
Он же жить без папы не сможет, а папа будет полностью привязан к детям..
Т.е. если вы у папы измените имена методов, или допишите еще пару методов - вам придется ковырять и все классы являющиеся от него зависимыми.
Вызываются то в них не личные методы, а методы родителя.
На*** оно такое нужно?
Я прочитал это не смог понять, неужели нельзя делать так:
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Класс - это цельная сущность, она должна быть самодостаточной. Если в классе есть получение внутриклассовых переменных - задаваться они должны там же. Наследование нужно для уменьшения кода . Есть у вас сущность "товар" ... с товаром можно совершать кучу вещей - продать, добавить в корзину, получить количество на сайте и тд. Но вот у вас появляется электронный товар. Что делать? выделять класс baseGood в который выносить все, что относится и к физическим и к электронным товарам (песни, электронные книги, видео) - это положить в корзину, узнать цену, оформить заказ и тд ... это немаленький список функций. НУ а то, что относится только к физическим товарам - создать отдельный класс и наследовать от baseGood (тут добавляют методы получения количества на складе, узнать стоимость доставки и тд) ... потом появится товар, у которго нужно узнавать цвет, размер, теплоемкость и тд.
Тоесть наследование для того что бы общие свойства и методы у схожих классов выделять, а не для того что бы городить кучу связанных между собой классов.
Теперь касательно вашего наследования от core ... что вы будете делать, если вас попросят все новости хранить в файлах (ну или там из мемкеша брать - не важно) ?
zdlr
Отправлено: 19 Октября, 2011 - 17:10:42
Новичок
Покинул форум
Сообщений всего: 14
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
Stierus пишет:
Класс - это цельная сущность, она должна быть самодостаточной. Если в классе есть получение внутриклассовых переменных - задаваться они должны там же. Наследование нужно для уменьшения кода . Есть у вас сущность "товар" ... с товаром можно совершать кучу вещей - продать, добавить в корзину, получить количество на сайте и тд. Но вот у вас появляется электронный товар. Что делать? выделять класс baseGood в который выносить все, что относится и к физическим и к электронным товарам (песни, электронные книги, видео) - это положить в корзину, узнать цену, оформить заказ и тд ... это немаленький список функций. НУ а то, что относится только к физическим товарам - создать отдельный класс и наследовать от baseGood (тут добавляют методы получения количества на складе, узнать стоимость доставки и тд) ... потом появится товар, у которго нужно узнавать цвет, размер, теплоемкость и тд.
Тоесть наследование для того что бы общие свойства и методы у схожих классов выделять, а не для того что бы городить кучу связанных между собой классов.
Теперь касательно вашего наследования от core ... что вы будете делать, если вас попросят все новости хранить в файлах (ну или там из мемкеша брать - не важно) ?
Вы правильно все пишите, и это можно прочесть везде. Я только до конца не понимаю как реализовать то что вы пишите. Если мне нужно будет брать новости из файлов, как быть я пока незнаю, я бы переписал Get(); а лучше написал другой метод работающий с файлами и запрашивал не Get() а GetFromFile() чтото такое.
Вот в этом и вопрос что все что я могу спросить на форуме, у вас или еще где просто перерастает в бесмысленный разговор также о сущьностях, о колбасе и компакт дисках, а понять куда таки впрягают коней я пока не увидел ответа.
Извините. Потому как бы и затеял этот разговор. И все. Вот сел час назад просто для себя почитать, набрал ОПП PHP статьи. И все что можно прочитать это примитив и не более. Нормально понять как все работает не так и сложно но есть моменты.
Сейчас у меня как все построено. Есть класс я его зову ядро, он умеет только работать с базой данных, берет, кладет, удаляет, обновляет. Далее если нужно новости напрмер - я пишу расширение класса, и беру ядро как родителя. И у же в классе новостей пишу - Дайте данные - и уже с ними работаю (примитивно описываю но по сути).
А как иначе никто нормально не может обьяснить. И тем более в такое положение вещей я попал когда только начал ООП изучать, мне достался класс с которым нужно было работать а он так и работал, от туда я и нахватался вероятно как сейчас выходит не очень правильного подхода.
Если есть минутся рассказать - прошу помоши.
Stierus
Отправлено: 19 Октября, 2011 - 18:03:17
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Если вы хотите конкретные советы по коду - выставляйте свой код, а так вы и будете получать абстрактные советы. Насчет доступа к данным я сегодня писал в соседнем топике http://forum.php.su/topic.php?fo...2&topic=1451
caballero
Отправлено: 19 Октября, 2011 - 18:08:10
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Сейчас у меня как все построено. Есть класс я его зову ядро, он умеет только работать с базой данных, берет, кладет, удаляет, обновляет. Далее если нужно новости напрмер - я пишу расширение класса, и беру ядро как родителя. И у же в классе новостей пишу - Дайте данные - и уже с ними работаю (примитивно описываю но по сути).
По такому принципу строятся решения типа ActiveRecord например
Цитата:
А как иначе никто нормально не может обьяснить
Иначе - можно сотней способов, например вообще без классов.
Покинул форум
Сообщений всего: 14
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
Немного патовая ситуация.
Конечно я понимаю что реализаций миллион может быть. Просто мне написали что так как я все делаю это не правильно и это каша. Что нельзя чтоб класс Новостей зависел от материнского класса и все такое. Что если в материнском классе поменяются названия методов то нужно будет и классно новостей переписывать. И я конечно могу с этим согласиться. Потому и спрашиваю - а как грамотно писать? Чтоб и класс новостей не зависел от материнского от куда он и запрашивает данные. Мне то как раз и стало интересно как так писать чтоб класс новостей мог сам данные выгребать но при этом был сам по себе. Неужели я должен в каждом классе описывать с нуля логику работы с данными получаемыми из базы данных.
Ладно, мы более скатились в какую-то философию.
Stierus
Отправлено: 20 Октября, 2011 - 09:51:20
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
zdlr, вы ссылку, которую я выше оставил, открывали?
zdlr
Отправлено: 20 Октября, 2011 - 10:22:58
Новичок
Покинул форум
Сообщений всего: 14
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
Stierus пишет:
zdlr, вы ссылку, которую я выше оставил, открывали?
Перечитал еще раз и честно признаюсь ничего не понял. Возможно причина тут кроется в том что я не до конца разобрался с интерфейсами и не использую их вообще.
Попробую проработать этот вопрос.
Stierus
Отправлено: 20 Октября, 2011 - 10:37:28
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
суть в том, что бы не напрямую записывать в базу данных или там в файл, а принимать в качестве аргумента экземпляр объекта, который это сделает. Метод не знает, куда он и как сохранит, он лишь знает, что экземпляр, переданный в аргументе, это сделает (это нам гарантирует интерфейс). То же самое с чтением данных.
то есть вместо функции getPosts()
будет функция getPosts($dao)
а внутри getPosts вместо колбасинга запросов к бд, будет return $dao->get(...)
зы
dao - Data Access Object
zdlr
Отправлено: 23 Октября, 2011 - 23:05:53
Новичок
Покинул форум
Сообщений всего: 14
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
Stierus пишет:
суть в том, что бы не напрямую записывать в базу данных или там в файл, а принимать в качестве аргумента экземпляр объекта, который это сделает. Метод не знает, куда он и как сохранит, он лишь знает, что экземпляр, переданный в аргументе, это сделает (это нам гарантирует интерфейс). То же самое с чтением данных.
то есть вместо функции getPosts()
будет функция getPosts($dao)
а внутри getPosts вместо колбасинга запросов к бд, будет return $dao->get(...)
зы
dao - Data Access Object
Спасибо за советы. Вот теперь мне становится многое понятнее. Благодарю за помощь.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.