Php __toString问题

Php __toString问题,php,tostring,magic-methods,Php,Tostring,Magic Methods,我正在构建一个小型MVC系统(学习),在视图文件中显示变量时遇到了一些问题 这是我的观点类: private $vars = array(); public function __set($key, $value) { $this->vars[$key] = $value; } public function __get($key) { return $this->vars[$key]; }

我正在构建一个小型MVC系统(学习),在视图文件中显示变量时遇到了一些问题

这是我的观点类:

private $vars = array();

    public function __set($key, $value)
    {
        $this->vars[$key] = $value;
    }


    public function __get($key)
    {
        return $this->vars[$key];
    }

    public function __toString()
    {
        return $this->vars[$key];
    }

    public function show($file)
    {
        global $router;
        $folder = strtolower($router->current_controller);

        $path = VIEWPATH.$folder.'/'.$file.'.phtml';
        if ( ! file_exists($path))
        {
            die("Template: $file, not found");
        }
        include ($path);
    }
这是我的控制器发来的:

$test = new View();
$test->name = 'karl';
$test->show('name_view'); 
和视图文件(名称\视图)

我做错了什么?也许我得做些全球化的事情

THX/Tobias


编辑:在包含视图文件之前,我刚刚在视图类中提取了vars数组,然后它就工作了。。谢谢您的帮助。

toString()中没有$key

而且_toString()不接受任何参数

用以下方法进行测试:

public function __toString()
{
    return json_encode($this->vars);
}

在编辑之后,我意识到您的问题不在_toString()方法上(您可以删除它,因为您没有使用它)。在您的案例中,执行
echo$this->name
是从视图内部显示变量的正确方法,但是如果您只想执行
echo$name
我可以建议一种不同的方法吗

function View($view)
{
    if (is_file($view) === true)
    {
        $arguments = array_slice(func_get_args(), 1);

        foreach ($arguments as $argument)
        {
            if (is_array($argument) === true)
            {
                extract($argument, EXTR_OVERWRITE);
            }
        }

        require($view);
    }
}
按如下方式使用查看功能:

$data = array
(
   'name' => 'karl',
);

View('/path/to/your/name_view.phtml', $data);

现在只需执行
echo$name,如果需要,可以将其调整为视图类。如果这不起作用,请尝试将name_view扩展名更改为
.php

show()函数的作用是什么?问题不在于u toString()方法,而在于将类变量作为全局变量访问。好吧,但这是一种使它们全局化的方法吗?好吧,我只是得到了“Undefined variable:”它起作用,尝试将该方法放置在视图类中,并执行
$test=newview()
echo$测试您应该得到所有变量的转储。如果我在控制器中回显$test,则会显示json字符串。但是我怎样才能找到视图文件中的每个变量呢?如果我回显$test->name,就会显示值(karl)。但是我不能在我的视图文件中使用它们。为什么会这样?@sandelius,我提供了一个通过变量名访问变量的解决方案
$data = array
(
   'name' => 'karl',
);

View('/path/to/your/name_view.phtml', $data);