如何在静态类的包含文件中获取变量

时间:2012-09-23 16:29:44

标签: php variables get include

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

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”错误。

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

谢谢!

1 个答案:

答案 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的变量,然后可以在视图脚本中正常使用。此外,它将视图与可能碰巧存在于程序中的其他偶然变量“中毒”隔离开来。即,只有您明确传递给方法调用的变量才能在视图脚本中使用。