![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| MoLeX |
|
||||||||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
Привет.
Пытаюсь из основного класса (CORE) вызвать класс test (используя ф-кцию load_class ) и в будущем обращаться к тестовому классу так
но пока что могу обратиться тока так
index.php
test.php
Добавлено через 1 минуту и 1 секунду не могу понять что не так Добавлено через 1 минуту и 44 секунды заодно покажите как правильно надо работать с ООП -------------------- Amazing |
||||||||
|
|||||||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
1. Если класс test должен быть синглтоном, то почему эти функции не возложить на него?
2. Почему не используете стандартный механизм autoload? 3. Из конструктора ВСЕГДА возвращается инстанс класса, а не непонятного класса $lib, который вы пытаетесь вернуть. Переопределяется это только на уровне Zend Engyne. 4. Мне непонятна цель всех этих манипуляций. Может вы объясните зачем это все? -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| Sanchezzz |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
Хм.. наконецто хоть кто то использует такое как и я.
в основном классе делаешь загрузку класса и кидаешь ее в массив в томже классе получается такая констркуция
тока тебе придется сделать проверку если такой класс и подрублен ли он. проверка если есть такой обьект в массиве то не грузить. вот и получается такая конструкция
минус в том что классы нужно хранить в одной папке и стакимже названием как и файл. Это сообщение отредактировал(а) Sanchezzz - 10.6.2009, 14:00 -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
||||
|
|||||
| MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
solenko, такое реализовано в фр-рке CI (думаю и в остальных тоже есть)
неа, не могу =) скорей всего это для того чтобы поумнеть))) Sanchezzz, -------------------- Amazing |
|||
|
||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
MoLeX, в symfony, zend, prado я что-то такого не встречал. CI, если память не изменяет, писался под php4 => там множество атавизмов.
Зачем все это складировать в хеш в одном классе мне совершенно не понятно. Для вашего примера __autoload + singleton -- более простое и, что немаловажно, понятное решение. -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| Sanchezzz |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
а вот еше продолжение как сделать так чтобы все классы подрубленые ядром могли из себя обратитсякк ядру вызвать еше классов или использовать функции ядра..
достаточно добавить в подрублениеглавного ядра такое. такое
получается можно использовать такое хр.. и в классах это гдето в файле ...
еше раз проверки что такой обьект в главном классе обезательно... а теперь о минусах и плюсах. + некого globals + полностью ООП. + можно добавить к главном ядру подключение к БД и передовать индификатар БД.. удобно использовать mysqli - тупой прогер не поймет о чё это такое... Эта идея а уже и готовое решение радилось в ответ globals и одной хр СМS не буду говорить как назвается а то реклама, наченается на Би.... Это сообщение отредактировал(а) Sanchezzz - 10.6.2009, 14:31 -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
||||
|
|||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
От использования глобальных переменных можно отойти и более культурно. Очень высокая связность классов. mail c testclass в вашем примере вполне могут общаться напрямую без надуманного посредника core.
Либо почитайте про паттерн registry либо нифига не понял Не потому что "тупой", а потому что так делать нет смысла ) -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| Sanchezzz |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
когда я начял делать как связывать один класс доступным для всех то мне кроме глобала тут нечего другого не подсказали globals
да и глобалс я не перевариваю.
хм принцеп действия такойже
хотя соединении с бд лучше делать вне класса потом передавать главному классу а потом уже другим.
Убеди почему не стойт делать такое. не удобно? Жесткая привязка к ядру? нет классы можно и без ядра юзать также. Просто получается громадная модульная система где все завязано на большом ядре которое можно расширять таким способом. Если не изобретать нечего нового то так и будем юзать чужие велики. Это сообщение отредактировал(а) Sanchezzz - 11.6.2009, 08:57 -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
||||||
|
|||||||
| solenko |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
уже в этой теме я дважды упомянул singleton и registry -- не поленитесь таки посмотреть. По поводу вашего примера с БД -- отдельно стоящий класс testclass должен знать что есть класс DB, что есть класс CORE и что CORE уже инициализировал DB. Потому еще раз повторюсь -- взгляните не сингтон. Тогда testclass должен будет всего лишь знать что DB существует. Добавлено через 2 минуты и 33 секунды
Да изобретайте на здоровье! Но если все делают велосипеды с круглыми, а не квадратными колесами, то может стоит задуматся почему? -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
||||
|
|||||
| ksnk |
|
||||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Может так? Затем, чтобы прозрачно для остального кода делать переопределение "модулей"? Правда для этого ее (функцию) по уму нужно превратить почти в настояший класс
нужно пользоваться изобразительными возможностями языка. Можно регистрировать новые модули-наследники примерно так:
Какбэ в случае, если есть проблемы с классом (срочно отлаживаем новую затычку), пишем массив. Если нет проблем с классом - он уже предварительно отлажет - не пишем длинный путь, а переименовываем файл в соответствии с именем класса и вставляем его местонахождение в путь поиска файлов. P.S. люблю я велосипеды!!! -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
||||||
|
|||||||
| icewind |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 11.4.2009 Где: Ростов-на-Дону Репутация: 20 Всего: 20 |
MoLeX, вам нужно было определить класс, для которого лоадер установил бы свойство. Вот так, утрированно...
Это сообщение отредактировал(а) icewind - 10.6.2009, 16:27 -------------------- ![]() |
|||
|
||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
Что значит переопределение модулей? Приведите пример, а то примеры, которые могу придумать я явно удобнее реализовывать по-другому. Сама п себу функция -- ничем не хуже. Хуже когда структура объекта не видна в исходном коде (вот как должен человек, разглядываюший такой класс догадатся что у него откуда-то появится абсолютно левое поле core?). Если уж вопрос стоял не "как сделать чтобы работало", то в идеале свойства объекта должны изменятся только через методы (хотя с этим иногда до абсурда доходит). Поведение объекта тоже должно быть скрыто от внешнего мира и тем, единственный будет создаватся объект или множество должен заведовать именно этот класс, а не непонятный core. Ну и вопрос связности тоже как бы задан мной но проигнорирован. -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| Sentox |
|
||||||
|
как то так ![]() ![]() Профиль Группа: Участник Сообщений: 392 Регистрация: 27.1.2009 Где: Зимбабве Репутация: 7 Всего: 7 |
MoLeX
test.php
Метод должен быть статичным для вызова
И однозначно это паттерн registry. Прислушайтесь к совету solenko. |
||||||
|
|||||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Приложение, application, которое добиваем до нужного функционала всякими модулями и плагинами. Плагин "новости", умеет выводить себя в виде "сокращенного списка" на главной, в виде страничного списка в списке новостей и еще в разных видах. Плагины инсталлируются в приложение, к примеру, функцией application::newPlugin($plugin). Хочется инсталлировать плагины не сразу, а только при первом непосредственном их использовании. Это значит, что код инсталляции упрятан в глубину кода, в место, непосредственно использующее функционал новостей, в функцию "вывода правого столбика главной", и т.д. Возникает пучек проблем. Если писать просто чего-то вроде $application->newPlugin(new news()), то возникнет та самая проблема переопределения плагина news, в случае, если мне приспичит состряпать его наследника с именем my_News. Итого, код инсталляции плагина должен выглядеть как-то так $application->newPlugin(load_class('news')), а вот уже этот самый load_class и будет изображать из себя фабрику, выдающую нужный нам плагин новостей. Он може быть и синглтон-объектом, если есть желание, но imho, функцией в PHP он получается немного поэффективней, да и букв поменьше писать... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| MoLeX |
|
||||||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
я тоже, так как с ними не работал
и имено от туда я подцепил идею. ведь данная запись куда удобнее (для меня)
чем
icewind, Добавлено через 9 минут и 9 секунд не очень красиво =) -------------------- Amazing |
||||||
|
|||||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |