2010-09-23 3 views
0

Мне нужно включить файлы в функцию, а файлы используют множество переменных, определенных ранее в скрипте. Использование global не является опцией, потому что невозможно сказать, какие переменные будут использоваться во включенных файлах. Только один реальное решение, чтобы сделать все глобальные переменные доступны в функции, что-то вроде:Сделать глобальные переменные доступными для включенного файла в функции

 function finc($file) 
    { 

     foreach($GLOBALS as $k=>$v) 
     { 
      $$k=$v; 
     } 
     include $file; 
    } 

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

+2

@ user410572: «только один реальное решение, чтобы сделать все глобальные переменные доступны в function ": глобальные переменные уже доступны внутри функции. Вот почему они глобальны. –

+2

Я бы начал с основной причины проблемы: «невозможно сказать, какие переменные будут использоваться во включенных файлах». Я бы разрешил это во-первых, возможно, установив переменные в массиве и подав это как аргумент функции (возможно, используя 'extract' внутренне на данный момент) – Wrikken

+1

@MainMa, это не так. Для этого вам нужно использовать 'global $ some_global_var' или' $ GLOBALS ['some_global_var'] '. – Lekensteyn

ответ

0

ответа на этот вопрос нет. только совет. использовать объекты ... то, что вы делаете, возможно, но, на мой взгляд, очень плохое решение, потому что вы определяете все глобальные переменные. однако есть более эффективный способ сделать это: extract($GLOBALS), но было бы лучше использовать $GLOBALs['whatever'] в ваших включенных сценариях ...

2

Остерегайтесь: вы действительно импортируете все глобальные переменные.

extract($GLOBALS); 
0

Если вы делаете это для шаблонирования, то вы должны предоставить шаблон только «контексту», , не все глобальные переменные. Просто укажите массив переменных, которые должны быть доступны в шаблоне, и их extract.

Если это не templateing то, что вы делаете, но маршрутизации вы должны думать о возвращении имени файла включить:

include getPathForPage('home'); 
Смежные вопросы