Доступность всех глобальных внутри функции.

Ugnich_Andrey

Новичок
Доступность всех глобальных внутри функции.

Добрый день!

Мне необходимо чтобы функция видела все глобальные переменные внутри себя.

т.е.
если
PHP:
<?
$a="a";
$b="b";
$c="c";
// ...
$z="z";

?>
То как все эти переменные сделать доступными внутри foo(); без того, чтобы каждый раз писать:
PHP:
<?
function foo(){
global $a, $b; // ... и так далее
}
?>
Список переменных может меняться.
Подскажите, пожалуйста.
 

Гравицапа

elbirret elcno
Ugnich_Andrey
А зачем понадобилось такое? То есть почему нельзя через параметры функции?
 

jonjonson

Охренеть
Ugnich_Andrey, что бы переменные стали доступны в функции, их нужно передать в неё. Если переменные взаимосвязаны, то предварительно их нужно определять как массив. Если же они не связаны и их много, то очевидно функция в данном случае определена не правильно.
 

Ugnich_Andrey

Новичок
Я пишу функцию кеширования результатов исполнения скрипта.
Фунция будет подключать (include) скрипт и сохранять результаты его выполнения во временном файле (кеш). При ее повторном вызове если кеш существует, то скрипт не выполняется еще раз определенный период времени (пока кеш не устарел).

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

Ugnich_Andrey

Новичок
Да, так лучше. Выкладываю код:
PHP:
<?
function fcashe_create($filename,$cachename){
// get output
ob_start();
include $filename;
$out = ob_get_contents();
ob_end_clean();
// delete old cache and save output
if(is_file($cachename)){
unlink($cachename);
}
$fp=fopen($cachename,"w");
fputs($fp,$out);
fclose($fp);
} // end fcashe_create

function fcache($filename,$cachename,$cache_life_time){
// fcache start
extract($GLOBALS);
foreach ($GLOBALS as $k=>$v) $$k=$v; 

if(!is_file($cachename)){
fcashe_create($filename,$cachename);
}else{
// cache exist
	if( ( time()-filectime($cachename) ) > $cache_life_time ){
	fcashe_create($filename,$cachename);
	}
}
echo "!!!a:".$a;
include $cachename;
return true;
}
?>
header
<hr>
<? 
fcache("overload_proc.php","cache.overload_proc.html", 3600);
?>
<hr>
footer
-~{}~ 27.02.07 16:47:

overload_proc.php - это процесс который создает лишнюю нагрузку на сервер. Поэтому мы результаты его работы сохраняем в кеш и выполняем раз в час в случае необходимости, а не каждый раз.

-~{}~ 27.02.07 16:50:

Мои результаты:
header
--------------------------------------------------------------------------------
!!!a:test
Notice: Undefined variable: a in z:\home\lawp\testarea\cache\nocashed\overload_proc.php on line 2
a:
--------------------------------------------------------------------------------
footer
Т.е. $a не видна в overload_proc.php

-~{}~ 28.02.07 11:40:

Все гениальное как всегда просто:
PHP:
function fcashe_create($filename,$cachename){
extract($GLOBALS); // Это и есть выход
// get output
ob_start();
include $filename;
$out = ob_get_contents();
ob_end_clean();
// delete old cache and save output
if(is_file($cachename)){
unlink($cachename);
}
$fp=fopen($cachename,"w");
fputs($fp,$out);
fclose($fp);
} // end fcashe_create
 
Сверху