Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Общие вопросы (http://forum.typo3.ru/forumdisplay.php?f=12)
-   -   Многократная инициализация user_ объектов PHP (http://forum.typo3.ru/showthread.php?t=3586)

c0d3r 05.06.2007 18:18

Многократная инициализация user_ объектов PHP
 
Случайно набрёл, отлаживая конструктор 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

Цитата:

Сообщение от c0d3r (Сообщение 12590)
Возможно, я не прав, но я бы предпочёл единичную инициализацию класса. Я уже написал - мыслю 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

Цитата:

Сообщение от c0d3r (Сообщение 12917)
Да, логика хромает - жесткий дедлайн, выбора нет, в ход идут любые костыли и т.д. Реальный ужос, я противник такого, но иногда бывает и так. После запуска "любой ценой" будет рефакторинг. За 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 вызывать как синглтоны не проблема, это работает.


Часовой пояс GMT +4, время: 19:37.

Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot