当我使用此函数时,由包含的脚本创建的变量将保留在此函数的范围内。
function reqscript($script)
{
$include_dir = 'inc/';
$page_ext = '.php';
include($include_dir.$script.$page_ext);
}
有没有办法让我不必使用以下方法?
include(buildfilename('...'));
答案 0 :(得分:1)
如果要在包含的文件中定义一些变量,则必须使用$GLOBALS
。
例如:$foobar = 42;
应为$GLOBALS['foobar'] = 42;
因此$foobar
在全局范围内(在函数之外)可用。
但我更喜欢buildfilename()
方法。
答案 1 :(得分:0)
你的答案已经在php.net上了,请在你所包含文件的末尾使用return。
http://php.net/manual/en/function.include.php
示例#5:
return.php
<?php
$var = 'PHP';
return $var;
?>
noreturn.php
<?php
$var = 'PHP';
?>
testreturns.php
<?php
$foo = include 'return.php';
echo $foo; // prints 'PHP'
$bar = include 'noreturn.php';
echo $bar; // prints 1
?>
答案 2 :(得分:0)
我建议您采用代码来使用buildfilename()
方法,就像Floem建议的那样。但是,如果您不能或不希望这样做,这里有一个简单的包装器将变量导入全局命名空间:
class Req {
public function __construct($src) {
include($src);
foreach (get_object_vars($this) as $name => $value) {
$_GLOBALS[$name] = $value;
}
}
}
function reqscript($script) {
$include_dir = 'inc/';
$page_ext = '.php';
new Req($include_dir . $script . $page_ext);
}