【问题标题】:How to get variable in included file in static class如何在静态类的包含文件中获取变量
【发布时间】:2012-09-15 06:20:37
【问题描述】:

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

一个.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;

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

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

谢谢!

【问题讨论】:

    标签: php variables get include


    【解决方案1】:

    您需要了解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 的变量,然后可以在视图脚本中正常使用它们。此外,它使视图免受程序中可能碰巧存在的其他附带变量的“毒害”。即,只有您显式传递给方法调用的变量才能在视图脚本中使用。

    【讨论】:

    猜你喜欢
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    相关资源
    最近更新 更多