Расширение возможностей Quano:
Сделайте еще один шаг вперед и включите переменные в глобальную область выполнения (которые в противном случае должны были бы вызываться с помощью global на внутренних объектах include). Идея состоит в том, что вы хотите, чтобы включение работало так, как если бы оно было включено в основную область вашего приложения или в область вашего определения.
Рассмотрим этот класс:
class PHPInclude {
private static $globalsList = array(
'GLOBALS','_SERVER','_GET','_POST','_FILES',
'_REQUEST','_SESSION','_ENV','_COOKIE'
);
public static function phpInclude($file,$variables=array()) {
if ( file_exists($file) ) {
$globs = array();
foreach ( $GLOBALS as $key => $value ) {
if ( !in_array($key,sefl::$globalsList) ) {
array_push($globs,$key);
}
}
foreach ( $globs as $key ) {
global $$key;
}
foreach ( $variables as $variable ) {
global $$variable;
}
unset($globs,$key,$value);
ob_start();
include $file;
return ob_get_clean();
}
return '';
}
}
Используйте его следующим образом:
$foo = 'bar';
function testScope() {
$woo = 'sah';
PHPInclude::phpInclude('file.phtml',array($woo));
}
Пример автоматически включает $foo
, поскольку он находится в глобальной области видимости, а $woo
добавляется, поскольку он находится в локальной области видимости.
Я не проверял $this
как произвольную переменную, но мои чувства паука говорят мне , что это не сработает (предупреждение) .