Php __toString问题
我正在构建一个小型MVC系统(学习),在视图文件中显示变量时遇到了一些问题 这是我的观点类: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]; }
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);