如果我有三个文件" index.php
" "file.php
" 和 " fns.php
"
第一个例子(它有效):
索引.php :
<?php
$var = "Variable Data";
include "file.php";
?>
文件.php:
<?php
var_dump($var); #Output will be : string(13) "Variable Data"
?>
第二个示例(它不起作用):
索引.php :
<?php
include "fns.php";
$var = "Variable Data";
load("file.php");
?>
fns.php :
<?php
function load($file) { include $file; }
?>
文件.php
<?php
var_dump($var); #Output will be : NULL
?>
如何使用load()
等函数包含文件并保持变量工作而无需额外的Global $var;
?
我的解决方案 :
<?php
function load($file)
{
$argc = func_num_args();
if($argc>1) for($i=1;$i<$argc;$i++) global ${func_get_arg($i)};
include $file;
}
#Call :
load("file.php", "var");
?>
由于将文件包含在函数中,因此包含文件的作用域就是该函数的作用域。
为了包含其他变量,请将它们注入到函数中。
function load($file, $var) { include $file; }
这样,$var
将可用。
你甚至可以让事情变得更动态:
function load($file, $args) { extract($args); include($file); }
并像这样使用它:
load("path/to/file.php", array("var"=>$var, "otherVar"=>$otherVar));
PHP 会将变量提取为正确的符号名称($var
、$otherVar
)。
当您尝试在函数中包含文件时,变量的作用域在函数中。如果在函数加载中设置变量,则不会NULL
。
function load($file, $var) {
include($file);
}