подключение кода из функции в глобальную область видимости

Vovan-U

Новичок
подключение кода из функции в глобальную область видимости

Мое почтение!

Да, знаю, возможно звучит глупо и дико, но все же хотел спросить.

Уперся в такую ситуацию, когда не желательно производить РУЧНОЙ include или eval в глобальном пространстве. Т.е. есть объект у которого имеется список файлов, и в конце своей жизни этот объект выполняет некий метод build, который собственно и завершает его работу. Но вот мне и хотелось бы, чтобы этот метод вызвал бы другой метод или функцию, которая бы включила код списка файлов в глобальное пространство. Блин, понимаю, бред несу...
Сейчас только так это вижу:

PHP:
// Глобальное пространство

$object->build();

// Завершающей стадией будет что то типа

foreach( $object->get_elements() AS $element )  {

    include_once( $element ); // ну или eval
}
В общем, возможно ли?...
 
:confused:

-~{}~ 08.08.07 11:00:

Если get_elements() возвращает итератор/массив, в котором current()/ячейках находится имя файла/код, то почему бы и нет?
 

Vovan-U

Новичок
Если get_elements() возвращает итератор/массив, в котором current()/ячейках находится имя файла/код, то почему бы и нет?
Да, именно пути до файлов. можно и так, но просто не желательно чтоб это так выглядело, нужно это дело спрятать на автоматический вызов.
а что такое "код списка файлов"?
если посмотреть на это выражение, то да, непонятно, а если на
которая бы включила код списка файлов
то думаю тут понятно будет :)

-~{}~ 08.08.07 11:23:

Вот уже сижу думаю, может это нужно писать экстеншен на уровне пыха... типа include_global(), вот только роюсь щас в исходниках и найти обчного includе-а пока не могу. Там же наверняка есть какой-то контроль области видимости, или я ошибаюсь?
 

Фанат

oncle terrible
Команда форума
Вова.
Давай ты не будешь здесь дурачка из себя строить?
"посмотрите налево, посмотрите направо".

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

поэтому потрудись описать свои проблемы более подробно. писатель экстеншенов
 

Vovan-U

Новичок
Вова.
Давай ты не будешь здесь дурачка из себя строить?
"посмотрите налево, посмотрите направо".
Гы
пока твой вопрос выглядит так, как будто ты не умеешь возвращать из функции значения или передавать аргумент по ссылке.
А если серъезно, ни возвращать, ни передавать по ссылке ничего не нужно. Так как в тех файлах выполняется обычный код, от которого мне ничего НЕ НУЖНО, да и знать о нем мне тоже не обязательно. Дело в том, что тому коду нужна глобальная область видимости и возможность выполниться в ней.
*****, если я опять не так выразился, ты говори, я попробую по другому изложить свою ситуацию.

Чувствую что действительно есть только одно решение, это вручную его прогонять...
 

Фанат

oncle terrible
Команда форума
мляяяя..
имеется в виду не "код списка файлов", а "список файлов с кодом, который надо выполнять"?!!!
 

Vovan-U

Новичок
Автор оригинала: *****
мляяяя..
имеется в виду не "код списка файлов", а "список файлов с кодом, который надо выполнять"?!!!
По сути, одно и тоже, так как "код списка файлов" это обощает весь код всего списка файлов :) но не об этом речь :)
Хорошо, вот смотри.
Решил расширить свой шаблонизатор так называемыми вставками Code Elements (очень удобно просто получается при наследовании шаблонов). Допустим есть шаблон:
PHP:
<BODY>
{TMPL:ELEMENT:get-header-data} - собсна якобы вызов элемента
<HR>{HEADER.WELLCOME}<HR>
<B>Root style header</B><BR>
{HEADER.TODAY}. {HEADER.YOUR_NAME}<BR>
{TITLE}
...
ЗЫ. Не нашел кнопки HTML-код

Основной PHP-файл например
PHP:
// Код, объект базы данных, объект шаблонизатора и т.д.


// Далее идет сборка всех шаблонов и его парс

$tmpl->build();

//так вот, перед тем как сбилдить все шаблоны нужно выполнить вызванные элементы, в нашем случае есть один, это get-header-data
// в списке он как elements/get-header-data.inc.php  и например содержание у него следующее

// Получение данных, неважно откуда
$data['wellcome']  = 'Добро пожаловать на сайт бла-бла-бла';
$data['today']     = 'Сегодня: дата такая то';
$data['your_name'] = 'Добрый день, Гость!';

$header = $tmpl->block( 'header' );
$header->assign( 'HEADER', $data );
$header->compile();
Только одно решение я пока вижу, ручное, которое я описал выше. сорри, я там немного с порядком перепутал, не после билда, а до его, т.к. блоки шаблонов после билда уже не доступны

PHP:
// Глобальное пространство

foreach( $object->get_elements() AS $element )  {

    include_once( $element ); // ну или eval
}

$object->build();
может быть еще какой-нибудь код, результат которого может использоваться в нижних вызовах элементов или же в самом модуле.

Или я не туда думаю?!
 
Можно. Ничегонезнаю, головуломаю, можетэкстеншн написать? Может можно кактосделать точтояужепридумал? Нуато чтояпридумал простокучубреда бустьвасневолнует.
 

cDLEON

Онанист РНРСlub
Систему ты конечно придумал.....Мягко скажем - бредовую.
Читай про операцию & в пхп + про массив $GLOBALS+ global
 

Фанат

oncle terrible
Команда форума
Вова. я, честно говоря, не сильно понял твою хитроумную систему.
но объясни мне одно. нафига шаблонизатору глобальная область видимости?
 

Vovan-U

Новичок
cDLEON, ты намекал мне на это?
PHP:
        /**
	 * Run elements with variables from the global scope
	 * 
	 * @return 		Void
	 */
	private function _run_elements()
	{
	    foreach ( $GLOBALS AS $k => $v ) {
	        
	        if ( is_object( $v ) ) { 
	            $$k = $GLOBALS[ $k ];
	        } else {
	            $$k = &$GLOBALS[ $k ];
	        }
	    }
	    
	    // тут инклюд елементов
	}
-~{}~ 08.08.07 15:15:

Автор оригинала: *****
Вова. я, честно говоря, не сильно понял твою хитроумную систему.
но объясни мне одно. нафига шаблонизатору глобальная область видимости?
Да, я согласен, она и нафиг ему не нужна... она нужна элементам с PHP кодом. Но чтоб сделать выполнение этих элементов автоматизировано... вот тут я и пришел к такому вопросу :)
Дело в том, что в самой системе, реализована модель MVC, и там проблем нет с вызовом модулей из шаблонов (типа активные шаблоны, у меня шаблонизатор поддерживает оба типа шаблонов - и push и pull), т.к. знает какой view с ним в данный момент общается. Но просто в нашей компании есть еще такие программисты, которые строят модульную структуру по старому дедовскому способу, типа склеивают разные части процедурного кода, вот им то и нужны эти вызовы элементов.

-~{}~ 08.08.07 15:17:

Систему ты конечно придумал.....Мягко скажем - бредовую.
Ну... что сказать, бредовой была только моя идея, описанная выше с самого начала топика. А в целом система очень даже ничего ;)
 

Фанат

oncle terrible
Команда форума
хорошо, другой вопрос.
НАХРЕНА нужны в ШАБЛОНЕ элементы с ПХП КОДОМ?
Да еще с доступом в глобальную область видимости?
 

Vovan-U

Новичок
НАХРЕНА нужны в ШАБЛОНЕ элементы с ПХП КОДОМ?
:) Теперь ты не правильно поставил вопрос. Ты наверное хотел спросить:
"НАХРЕНА нужны в ШАБЛОНЕ дескрипторы вызова элементов с ПХП КОДОМ?"

-~{}~ 08.08.07 15:47:

Попробую щас объяснить на простейшем реальном примере, который имел место быть...
 

Фанат

oncle terrible
Команда форума
в шаблоне нет никаких дескрипторов вызова элементов.
 
Сверху