0

我需要将 $user 发送到类内部并渲染函数以使其成为全局变量。

因为除非我在类和渲染函数中写“$user”,否则它不起作用。

请帮我。

$user = 'admin';

class Template{
public function render($template_name)
{
    global $user;
    $path = $template_name . '.html';
    if (file_exists($path))
    {
        $contents = file_get_contents($path);

        function if_condition($matches)
        {
            $parts = explode(" ", $matches[0]);

            $parts[0] = '<?PHP if(';
            $parts[1] = '$' .$parts[1]; // $page
            $parts[2] = ' ' . '==' . ' ';
            $parts[3] = '"' . substr($parts[3], 0, -1) . '"'; //home
            $allparts = $parts[0].$parts[1].$parts[2].$parts[3].') { ?>';
            return $allparts.$gvar;
        }

        $contents = preg_replace_callback("/\[if (.*?)\]/", "if_condition", $contents);
        $contents = preg_replace("/\[endif\]/", "<?PHP } ?>", $contents);   

        eval(' ?>' . $contents . '<?PHP ');
    }
}

 }

 $template = new Template;
 $template->render('test3');
4

1 回答 1

2

永远,永远不要使用全局变量

它们很糟糕,它们将您的代码绑定到上下文并且它们是副作用 - 如果您将在第 119 个包含文件的第 2054 行中的某处更改您的变量,您的应用程序的行为将会改变,然后祝您调试好运那。

相反,您应该将您的用户传递给方法的参数:

public function render($template_name, $user)

或在类实例中创建属性:

class Template
{
   protected $user = null;

   public function render($template_name)
   {
     //access to $this->user instead of $user
   }
   //...
}

-当然,$user在类构造函数中初始化属性。

于 2013-10-21T10:49:45.300 回答