Перехватить вызов несуществующей переменной

shp

Новичок
Перехватить вызов несуществующей переменной

Можно ли в PHP перехватить вызов несуществующей (глобальной) переменной и заинициализировать ее? Нужно для генерации данных для шаблона "по требованию". Т.е. в шаблоне вызываем некую переменную:
PHP:
<?php echo $page_title ?>
Дальше где-то перехватываем ее, инициализируем требуемым значением, затем она выводится в шаблоне. Можно ли это реализовать в PHP?

P.S. (Естественно, можно заранее подготовить все возможные переменные, или получать данные из шаблона с помощью некой ф-ии (
PHP:
echo foo('var_name')
).
 

findnext

Новичок
shp
зачем это нужно?

-~{}~ 30.04.09 15:46:

PHP:
 $page_title = (!empty($page_title)) ? 'zna4enie' : '';
так не подходит?
 

Духовность™

Продвинутый новичок
shp
не понятно, что значит "генерации данных для шаблона "по
требованию"".

Если в шаблоне стоит вызов переменной, то подразумевается, что переменная уже _должна_ быть определена. Т.е. содержать какое-нибудь значение, а не быть шаманским калбеком на логику программы.

Есть паттерн проектирования ленивая загрузка, Lazy Load, но данный прием приемлим исключительно для написания _программного кода_. В шаблоне ты должен вывести уже сгенерированные данные и никак иначе.

-~{}~ 30.04.09 15:58:

findnext
так не подходит?
не, он видимо хочет при вызовае переменной name обращаться к программе и получать name путем запроса к БД
 

shp

Новичок
не, он видимо хочет при вызовае переменной name обращаться к программе и получать name путем запроса к БД
Да, именно так. Просто хочется выводить данные простым php-шным echo/print (
PHP:
<?php echo $page_title ?>
) и при этом генерировать для шаблона только те данные, которые реально будут выводиться, чтобы ресурсы зря не тратить.
 

Духовность™

Продвинутый новичок
shp
м.... а кто тебя заставляет генерировать данные, которые НЕ нужны для шаблона?
 

findnext

Новичок
shp
какой то очень странный подход к программированию на php
 

Фанат

oncle terrible
Команда форума
findnext, ты не понял вопроса.
Вопрос интересный, да, но, наверное, triumvirat прав. чересчур активный шаблон какой-то получается
 

Gorynych

Посетитель PHP-Клуба
shp пытаетесь решить проблему неиспользованных на уровне логики переменных, которые определены в шаблоне?

на вскидку два варианта:

1) предварительный парсинг с целью сбора всех переменных и их инициализации хотя бы "пустышками"

2) понимажение уровня реакции на ошибку обращения к неинициализированной переменной при выводе шаблона с последующим восстановлением уровня реакции на ошибку

Можете еще покапать как это реализовывается на примере XTemplate (на мой взгляд он достаточно компактный для того, чтобы его поприпарировать и посмотреть что и как).
 

Safary

Новичок
Мне так кажется, автор пытается заработать в инете и делает сайт-хамелеон. :)
Сам таким занимаюсь...
 

Gorynych

Посетитель PHP-Клуба
Автор оригинала: Safary
Мне так кажется, автор пытается заработать в инете и делает сайт-хамелеон. :)
Сам таким занимаюсь...
этот вывод сделан на основании того, что в обсуждении фигурирует page_title? По-моему это слишком категоричный вывод
 

Духовность™

Продвинутый новичок
х инициализации хотя бы "пустышками"
Зачем парсить? Это легко реализуется путем класса-обертки view с магическими __get и __set методами.

У меня как раз так и реализовано:

PHP:
    <tr>
        <td><strong class="compulsory"><?=$this->err->user_login?></strong></td>
    </tr>
суть в том, что когда нет ошибочной ситуации (нет в массиве err user_login ключа), то вызов несуществующей переменной возвращает null. Очень удобно.
 

shp

Новичок
Тема, я вижу, продолжает жить :)

Автор оригинала: Gorynych
shp пытаетесь решить проблему неиспользованных на уровне логики переменных, которые определены в шаблоне?

на вскидку два варианта:

1) предварительный парсинг с целью сбора всех переменных и их инициализации хотя бы "пустышками"
Если уж парсить, тогда лучше, наверное, взять исходный шаблон с простыми метками типа "{var_name}" и преобразовать в шаблон-2, где эти метки заменены на "foo('var_name')"...

Автор оригинала: Gorynych
2) понимажение уровня реакции на ошибку обращения к неинициализированной переменной при выводе шаблона с последующим восстановлением уровня реакции на ошибку
Тоже думал, но мне показалось, что через свой обработчик ошибок (если я правильно понял мысль) - несколько кривовато.

Автор оригинала: Safary
Мне так кажется, автор пытается заработать в инете и делает сайт-хамелеон. :)
Сам таким занимаюсь...
Да нет, все проще - препарирую Друпал :) Там шаблоны как-раз довольно "универсальные", соответственно, не всегда шаблон использует все переменные, которые ему предоставляет ядро. Сами шаблоны представляют собой обычный php-код, переменные выводятся простым print.

Автор оригинала: triumvirat
Зачем парсить? Это легко реализуется путем класса-обертки view с магическими __get и __set методами.
Тоже об этом подумал буквально перед заходом сюда :) Видимо, это лучший вариант.
 

Alexandre

PHPПенсионер
Можно ли в PHP перехватить вызов несуществующей (глобальной) переменной и заинициализировать ее?
а так:
PHP:
if ( ! isset($mySuperGlobalVar)) $mySuperGlobalVar = $mySuperValue;
от коментариев к активным шаблонам воздерживаюсь
мне эта идея не нравится
 

shp

Новичок
Эта конструкция должна быть в шаблоне, так? В таком случае получается слишком громоздко. Тот же вариант
PHP:
echo $tpl->varName
(+ перехват varName в __get()) явно проще.

Автор оригинала: Alexandre
от коментариев к активным шаблонам воздерживаюсь
мне эта идея не нравится
Если не лень, все же прокомментируйте, чем именно не нравится :) Просто интересно мнение.

Ведь по сути это тот же "пассивный" шаблон, просто он является точкой входа.
 

Духовность™

Продвинутый новичок
Это не активные шаблоны. Это вообще к шаблонизации мало отношения имеет.

shp
я так и не понял, чего вы хотите добиться? что бы при обращении к переменной стартовала логика получения значения этой переменной из хранилища?
 

shp

Новичок
Автор оригинала: triumvirat
Это не активные шаблоны. Это вообще к шаблонизации мало отношения имеет.
Ну а что тогда в вашем понимании "активные шаблоны"?

Автор оригинала: triumvirat
shp
я так и не понял, чего вы хотите добиться? что бы при обращении к переменной стартовала логика получения значения этой переменной из хранилища?
Да, именно. Точнее, этого я добился. Теперь изучаю, имеет ли это смысл :) (на примере Друпала)
 
Сверху