Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Область видимости переменных


Автор: MoLeX 14.12.2010, 09:13
Добрый день. 

Есть функция вызова модуля. Количество переменных которые будут задействованы в модуле растет
index.php
Код

<?php
$var1 = 'var1';
$var2 = 'var2';

load_module('test');
function load_module( $name )
{
    global $var1, $var2;    

    require $name.'.php';
}
?>


test.php
Код

<?php
echo $var1.'<br />'.$var2.'<br />';
?>



Хочу избавиться от global при вызове модуля таким способом
Код

<?php
$var1 = 'var1';
$var2 = 'var2';
$varN = 'varN';

load_module('test');
function load_module( $name )
{
    extract($GLOBALS);  

    require $name.'.php';
}
?>


test.php
Код

<?php
echo $var1.'<br />'.$var2.'<br />'.$varN.'<br />';
?>



Может есть еще способ?

Автор: gta4kv 14.12.2010, 09:27
http://ru2.php.net/manual/en/function.func-get-args.php
?

Автор: MoLeX 14.12.2010, 09:32
gta4kv, знаю про эту функцию. Но передавать каждый раз огромный количество нужных мне переменных, как то не очень  smile

Автор: gta4kv 14.12.2010, 09:37
собери в массив... или поменяй подход  smile 

Автор: ksnk 14.12.2010, 09:45
GLOBALS - слишком большой и трудноконтроллируемый массив. Более логично организовать какую-нибудь класс-обертку. Она будет собирать переменные. екстрагировать их перед вызовом модуля.
Обычная для шаблонизаторов практика:
setVariable, которая собирает в классе ассоциативный массив с нужными значениями и 
callModule, в которй первой строчкой идет extract всего массива переменных.

Автор: skyboy 14.12.2010, 09:55
т.е. любой модуль может по своему желанию переписывать(читай - "портить") общие(читай - "конфигурационные") данные?
массив глобальных переменных - самый худой механизм.
уже лучше класс-синглтон, реализующий http://ua.php.net/manual/en/class.arrayaccess.php для удобства работы. и тогда на выбор: либо логирование повторной записи в существующие поля, либо вообще запрет на повторную запись имеющихся переменных.

Автор: MoLeX 14.12.2010, 09:56
уже переделали)
Изменили малость логику подключения модулей и все)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)