Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Как обойтись без статического свойства
McLotos  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



武士道
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1292
Пользователь №: 28342
На форуме: 6 лет, 11 дней
Карма: 28




Всем привет! У меня очередной бзик, который заставляет меня долго думать над задачей. Суть задачи в следующем:
Есть класс Template, он вызывается классом View, от которого наледуется несколько других классов.
Каждый наследник класса View вызывает у родителя метод assign(), который в свою очередь записывает принимаемые данные в одно из свойств объекта Template.
Получается так, что каждый следующий дочерний объект класса View перезатирает результаты предыдущих.
В качестве самого простого решения, можно просто сделать свойство статическим и обучить метод assign дозаписывать данные туда, но мне хочется обойтись без статики.
Как второе решение, в классе View проверять вызывался ли ранее объект Template, но в таком случае тоже придется делать статическую переменную, только уже на уровне класса View.
Как можно обойтись в этой ситуации без статики?


--------------------
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3691
Пользователь №: 38635
На форуме: 3 года, 5 месяцев, 27 дней
Карма: 195




А чем статические поля не угодили? Полезный инструмент.


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
McLotos  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



武士道
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1292
Пользователь №: 28342
На форуме: 6 лет, 11 дней
Карма: 28




Цитата (AllesKlar @ 24.02.2017 - 20:13)
А чем статические поля не угодили?

ну не знаю. как-то я с ними не подружился, наверное потому-что в проекте, который я обслуживаю всё построено только на статических свойствах и статических методах, т.е. проект состоит из огромной кучи "классов", и ни одного объекта =)
в общем просто достали =)


--------------------
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3691
Пользователь №: 38635
На форуме: 3 года, 5 месяцев, 27 дней
Карма: 195




Ну давай с другой стороны (на пальцах):
Есть родительский класс, и куча наследников.
Для всех наследников одно из полей родительского класса должно быть общим.
Вывод? Это статическое поле.
Ну хочешь извращений, запили синглтон, как поле родителя, и будет тебе не статическое. Только зачем городить?

Если все свойства и методы статические, может так надо было?
Мы же не знаем суть проекта.


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
McLotos  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



武士道
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1292
Пользователь №: 28342
На форуме: 6 лет, 11 дней
Карма: 28




Цитата (AllesKlar @ 24.02.2017 - 20:55)
Для всех наследников одно из полей родительского класса должно быть общим.

Не совсем так, в родительском объекте View вызывается объект Template, у которого в свою очередь есть нужное свойство.
поэтому тут можно либо Template сделать синглотом или сделать его свойство статическим, или сделать у класса View статическое свойство, в котором хранить объект Template. Но мне кажется что должен быть способ без статики, а если использовать магические методы типа sleep и wakeup?


Цитата (AllesKlar @ 24.02.2017 - 20:55)
Если все свойства и методы статические, может так надо было?

просто это попытка приподнести процедурное программирование как ООП =)


--------------------
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3691
Пользователь №: 38635
На форуме: 3 года, 5 месяцев, 27 дней
Карма: 195




Цитата (McLotos @ 24.02.2017 - 17:30)
просто это попытка приподнести процедурное программирование как ООП =)


Ну ХЗ, иногда бывает нужны утилиты из core, которые глупые по отношению данных и общие для любых приложений.
public static void download(Url source, File destination ); 

Чисто статический метод, зачем ради него порождать объект :)


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1941
Пользователь №: 38654
На форуме: 3 года, 5 месяцев, 21 день
Карма: 46




Ты можешь просто передать архитектуру.

У тебя сейчас судя по всему генерация html и выборка данных для него идут одновременно, поэтому из одной вьюхи нужно дергать другую, а шаблонизатор один, если я правильно понял ситуэйшен.

Решение довольно простое, сначала получить все данные для всех шаблонов, а потом по данным сгенерировать html. Это решение простое с архитектрной точки зрения, но с точки зрения реализации там нужно уметь применять метапрограммирования, ООП, рекурсию.

Если оставить решения таким как у тебя, то возьми Pimple, интегрируй его в свой проект и вызывай Template как синглтон. Используя Pimple ты хоть не так зашкваришся с методологической точки зрения.

P.S: Вообще в данной ситуации Template лучше не делать одиночкой, а для каждой вьюхи инициализировать свой Template.


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
McLotos  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



武士道
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1292
Пользователь №: 28342
На форуме: 6 лет, 11 дней
Карма: 28




Цитата (AllesKlar @ 24.02.2017 - 23:24)
Чисто статический метод, зачем ради него порождать объект smile.gif

может тогда просто не стоит делать их него метод? Может он просто функция?
Цитата (chee @ 25.02.2017 - 00:22)
P.S: Вообще в данной ситуации Template лучше не делать одиночкой, а для каждой вьюхи инициализировать свой Template.

не получится, просто потому-что может быть допустим такая ситуация:
1. есть базовый View и от него наследуется View текущего модуля
2. На странице в определенном месте шаблона должен быть встроен View отключаемого компонента, например менюшка или форма авторизации.


--------------------
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Гость_chee  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









McLotos, все равно не понятно, почему не получиься, ты же должен брать данные из вьюшек, а не из объекта шаблонизатора. Если у тебя шабллонизатор используется как хранилище данных, то стоит переработать архитектуру.
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса