В PHP 5.3 добавлена поддержка пространств имен, но эта версия пока слабо распространена и непригодна для промышленного использования в распространяемых проектах. А пока новая версия в пути, я сделал простую замену пространств имен для переменных.
Эти функции можно использовать, когда нужно передать переменные из одного включаемого скрипта в другой, но неизвестно что с ними может случиться по дороге. В конце первого скрипта вызываем функцию nsout() с идентификатором пространства и списком переменных, которые нужно сохранить, а перед использованием этих переменных во втором скрипте вызываем nsin() с идентификатором пространства.
UPD: Как подсказал homm есть две замечательные функции compact() и extract(), которые как раз для этого и предназначены. Так что можно писать так:
А потом
Кроме того функция extract() дает дополнительный контроль над извлечением переменных, позволяя добавлять префикс, и контролировать конфликты.
Эти функции можно использовать, когда нужно передать переменные из одного включаемого скрипта в другой, но неизвестно что с ними может случиться по дороге. В конце первого скрипта вызываем функцию nsout() с идентификатором пространства и списком переменных, которые нужно сохранить, а перед использованием этих переменных во втором скрипте вызываем nsin() с идентификатором пространства.
Copy Source | Copy HTML
- // Сохрняем переменные пространства имен
- function nsout($ns, $vars = array()) {
- global $NS;
- foreach ($vars as $var)
- eval("global $$var; \$NS[\$ns][\$var] = $$var;");
- }
-
- // Восстанавливаем переменные пространства имен
- function nsin($ns) {
- global $NS;
- $code = '';
- if (!is_array($NS)) return;
- foreach ($NS[$ns] as $name => $value)
- $code .= "<br/> global $$name;<br/> $$name = " . php_var_map($value) . ";<br/> ";
- eval($code);
- }
-
- function php_var_map($var) {
- if (!is_array($var))
- return "'$var'";
- else {
- $code = '';
- foreach ($var as $name => $value)
- $code .= ($code ? ', ' : '') . "'$name' => " . php_var_map($value);
- return "array($code)";
- }
- }
UPD: Как подсказал homm есть две замечательные функции compact() и extract(), которые как раз для этого и предназначены. Так что можно писать так:
$NS['ns1'] = compact('var1', 'var2', 'var3');
А потом
extract($NS['ns1']);
Кроме того функция extract() дает дополнительный контроль над извлечением переменных, позволяя добавлять префикс, и контролировать конфликты.