san*_*ius 2 php tostring magic-methods
我正在构建一个小的MVC系统(学习),我在视图文件中显示变量时遇到了一些问题.
这来自我的View类:
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);
}
Run Code Online (Sandbox Code Playgroud)
这是来自我的控制器:
$test = new View();
$test->name = 'karl';
$test->show('name_view');
Run Code Online (Sandbox Code Playgroud)
和视图文件(name_view)
echo $name // doesn't work
echo $this->name // Works
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?也许我想要做一些全球化的事情?
THX/Tobias
编辑:我刚刚在包含视图文件之前在视图类中提取了vars数组,然后它工作了..谢谢大家的帮助.
__toString()中没有$ key!
另外__toString()不接受任何参数!
用这个测试:
public function __toString()
{
return json_encode($this->vars);
}
Run Code Online (Sandbox Code Playgroud)
编辑后我意识到你的问题不在__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);
}
}
Run Code Online (Sandbox Code Playgroud)
像这样使用View函数:
$data = array
(
'name' => 'karl',
);
View('/path/to/your/name_view.phtml', $data);
Run Code Online (Sandbox Code Playgroud)
现在它应该只是通过操作echo $name;,如果你愿意,你可以将它调整到你的View类.如果这不起作用,请尝试将name_view视图扩展名更改为.php.
| 归档时间: |
|
| 查看次数: |
303 次 |
| 最近记录: |