php框架中$this->display()是如何获取本方法定义的变量并传递到模板里面的?


我用thinkphp,控制器要传递变量给模板时候,只要在控制器方法里面定义任意多个变量,然后后面加上一句:
$this->display(),
方法内的全部变量都能自动传递到模板里面了。

这个是怎么实现的??什么原理?

变量要传到函数里面,除了在括号里面传值,不能就只能用global了吗?框架既没有global,又没有括号传参,控制器方法的变量是怎么跑到模版里面去的?

我自己写的框架,没这个功能,要传变量给模板只能这样:$this->display($abc);为了模板那边接收方便,我一般只传一个变量,控制器这边有多个=变量的就压成一个数组传过去。看起来很土鳖的感觉。

怎么办呢这个???怎写能写一个不用括号赋值就能自动把控制器变量都传到模板的功能?

php mysql

whyisme 11 years, 4 months ago

我自己写的时候是这么写的:

   
  class Controller{
  
protected $view_vars = array();

public function __set($var,$val){
$this->view_vars[$var]=$val;
}
public function display($tpl){
$view = new View();
$view->display($tpl,$this->view_vars);
}
}

class View{

public function display($tpl,$data){
extract($data);
require $tpl;
}
}

class IndexController extends Controller{
public function index(){
$this->title = 'asdf';
$this->display('index');
}

}

主要是extract函数。。。你看看这个函数就了解了。

洛洛小狐狸 answered 11 years, 4 months ago

Your Answer