Вход

Просмотр полной версии : Многократная инициализация user_ объектов PHP


c0d3r
05.06.2007, 18:18
Случайно набрёл, отлаживая конструктор user_ класса, что он запускается столько же раз, сколько мы имеем вызовов объектов


lib... = USER
lib...{
userFunc = user_view->....
}


Помоему, всё это кэшируется, но всё равно как-то это нелогично... конечно, это я всё PHP-категориями мыслю... :)

Pavel Antonov
05.06.2007, 21:08
И в чем же отсутствие логики?

c0d3r
06.06.2007, 09:52
Возможно, я не прав, но я бы предпочёл единичную инициализацию класса. Я уже написал - мыслю PHP-категориями, то есть так как привык работать. Не обращайте внимания, мой испуг уже прошёл, главное, что USER кэшируется :)

Pavel Antonov
06.06.2007, 13:40
Возможно, я не прав, но я бы предпочёл единичную инициализацию класса. Я уже написал - мыслю PHP-категориями, то есть так как привык работать. Не обращайте внимания, мой испуг уже прошёл, главное, что USER кэшируется :)

Каждый блок, самостоятельный объект, имеющий собственную привязку на странице и ID, с любой точки зрения... и PHP в том числе - это разные объекты! Причем тут инициализация класса, вообще не понятно... видимо у Вас какое то другое PHP, отличное от моего :D. Кроме того, коль уж так зациклены на PHP, Вам должно быть известно что такое Singleton.

USER может тоже не кэшироваться при установке no_cache = 1... Вместе со всей страницей.

c0d3r
06.06.2007, 14:56
PHP вряд ли другое :) Инициализация объекта имелась в виду, конечно, извиняюсь. То, что там самостоятельные объекты, я понял, вопрос закрыт.

c0d3r
15.06.2007, 12:59
Важный вопрос вдогонку - можно как-то прописать запуск синглтона через USER?

Ситуация такая - один метод класса генерит данные, необходимые другому методу.
Но при многократной инициализации такой подход можно реализовать только через singleton.


lib.content = USER
lib.content {
userFunc = user_view->content
}

lib.pager = USER
lib.pager {
userFunc = user_view->pager
}


Хотелось бы, чтобы пейджер знал об общем кол-ве записей из content, которые ему нажно раскидывать по страницам.
Передавать через $GLOBALS как-то неэтично, верю, есть более изящный и логичный Typo3-way :)

void
16.06.2007, 02:06
Существует глобальный массив T3_VARS. Однако мне кажется, что здесь ошибка в логике проектирования приложения. Что вы будете делать, если пейджер будет вызван до content?

c0d3r
16.06.2007, 09:05
Да, логика хромает - жесткий дедлайн, выбора нет, в ход идут любые костыли и т.д. Реальный ужос, я противник такого, но иногда бывает и так. После запуска "любой ценой" будет рефакторинг. За T3_VAR (у Вас опечатка) спасибо, но глобальный массив - это не ООП :), а интересует именно работа USER с синглтоном, раз уж о чём-то таком упомянул Павел.

Pavel Antonov
16.06.2007, 18:08
Да, логика хромает - жесткий дедлайн, выбора нет, в ход идут любые костыли и т.д. Реальный ужос, я противник такого, но иногда бывает и так. После запуска "любой ценой" будет рефакторинг. За T3_VAR (у Вас опечатка) спасибо, но глобальный массив - это не ООП :), а интересует именно работа USER с синглтоном, раз уж о чём-то таком упомянул Павел.

Опять не понял причем тут TYPO3?

Нужен Singleton, ну так делайте! Если PHP4, то без $GLOBALS (или $_SESSION) не обойтись никак.

Если дедлайн, то чего бы просто не сделать, а потом уже рассуждать об ООП?

c0d3r
17.06.2007, 11:42
Да, php4, будем пробовать.
А почему Вы решили, что делается иначе? ;)

Итак, продолжаем после дедлайна :)))

Опять не понял причем тут TYPO3?
См. вышеприведённый код про lib.content = USER.

Я не понимаю, как можно запускать класс user_view синглтоном (надо полагать, инициализация происходит в ходе парсинга TS).
Если Вы поннимаете, подскажите, пожалуйста.
ps Классы, которые вызывает user_view вызывать как синглтоны не проблема, это работает.