2

我在文件中获取变量时遇到问题,该变量是通过静态类方法包含的。

一个.php:

require_once("classes/tools.class.php");

$variable = "variable";

Tools::setView("test");

工具类.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;

在“回声”之后,我得到了“未定义的变量”错误。

有人可以帮我解决这个问题吗?

谢谢!

4

1 回答 1

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);

这将在函数范围内创建名为$oneand的变量$two,然后可以在您的视图脚本中正常使用这些变量。此外,它使视图免受程序中可能碰巧存在的其他附带变量的“毒害”。即,只有显式传递给方法调用的变量才能在视图脚本中使用。

于 2012-09-23T16:39:06.990 回答