我在文件中获取变量时遇到问题,该变量通过静态类方法包含。
one.php:
require_once("classes/tools.class.php");
$variable = "variable";
Tools::setView("test");
tools.class.php:
class Tools{
public static function setView($viewName){
if(!is_file("views/" . $viewName . ".php")){
echo "Chyba pri nacitani view: \"$viewName\" v " . $_SERVER["SCRIPT_NAME"];
die();
}
else{
include "views/" . $viewName . ".php";
}
}
}
查看/ test.php的:
echo $variable;
在“echo”之后我得到了“Undefined variable”错误。
有人可以帮我解决这个问题吗?
谢谢!
答案 0 :(得分:2)
您需要了解variable scope
的工作原理。在这种情况下,您无法在视图脚本中看到您的变量,因为视图脚本正在函数内执行,并且该函数无法访问全局范围中的变量。您可以在函数内部将变量声明为全局变量,但不推荐这样做 - 如果您事先不知道将要设置哪些变量,那么这是不切实际的。
理想情况下,您需要将视图脚本将使用的变量注入设置视图的调用中。也许是这样的:
public static function setView($viewName, $vars) {
// loop through the passed vars and set them in the local scope
extract($vars);
// render the view
include "views/" . $viewName . ".php";
}
然后,在调用setView时传递变量:
$vars = array(
'one' => 1,
'two' => 2
);
Tools::setView('test', $vars);
这将在函数范围内创建名为$one
和$two
的变量,然后可以在视图脚本中正常使用。此外,它将视图与可能碰巧存在于程序中的其他偶然变量“中毒”隔离开来。即,只有您明确传递给方法调用的变量才能在视图脚本中使用。