我是一名学生,是PHP的新手。在搜索了很多之后,我仍然不明白视图文件是如何从控制器中获得变量的。我从Controller.php类中获得了函数view((。
public function view($view, $data=[])
{
require_once "./mvc/views/".$view.".php";
}
我得到了一个HomeController.php扩展控制器
function toTheView($x,$y){
$model = $this->model("User");
$sum = $model->Sum($x,$y);
$this->view("calc", compact('sum'));
}
这是我的calc.php视图文件。
<h3><?php echo $data["sum"]; ?></h3>
正如您所看到的,calc.php不需要来自Controller.php或HomeController.php的任何文件,但它是如何显示该变量的?我的IDE在calc.php中的那一行显示红色警报,但它仍然有效。
谢谢你帮我。
您的require_once
包括该位置的文件内容,因此您的视图字段可以访问同一范围内的任何变量,因此它可以使用从public function view($view, $data=[])
传递的变量,也可以访问$this
。
最后,你的代码看起来是这样的:
public function view($view, $data=[])
{
// after executing: require_once "./mvc/views/".$view.".php";
<h3><?php echo $data["sum"]; ?></h3>
}
您可以使用get_defined_vars
作为阵列并使用extract
将其转换为变量
示例:HomeController.php
function toTheView($x,$y){
$model = $this->model("User");
$sum = $model->Sum($x,$y);
$this->view("calc", get_defined_vars());
}
Controller.php类的view((
public function view($view, $data=[])
{
extract($data);
require_once "./mvc/views/".$view.".php";
}
calc.php
<h3><?php echo $sum; ?></h3>