求助一个诡异问题,愿闻其详

#1 jeffrey_shou

控制器代码片段:

class sys extends spController
{
private $App_Belong;
public $vardebug='abc';

function __construct(){
parent::__construct();
$this->App_Belong="sa";
//$this->page_data='abc';
/*$this->page_data=array(
//读取页面基础数据的缺省值
'base'=>$GLOBALS['G_SP']['page_date_base'],
'es_docs_pool'=>array(),
);*/
}


其中某个动作代码:
 
function debug(){
  $this->display("sa/sys_debug.html");
}


模板代码:
<{$vardebug}>

为何在模板引用时,不能显示其值?

2010-08-21 17:43:35

#2 jeffrey_shou

但echo或dump $this->vardebug却是有值的?谢谢

2010-08-21 17:44:30

#3 okbb

愿闻其详..

2010-08-21 18:00:48

#4 jeffrey_shou

愿闻其详..
okbb 发表于 2010-8-21 18:00
楼上的同样有这样的困惑?

2010-08-21 18:02:49

#5 okbb

public $this->vardebug='abc';



tpl中就可以用,<{$vardebug}>

你control里的变量没传给tpl模板

2010-08-21 20:11:31

#6 jake

如果是控制器内已经定义的变量,比如private $App_Belong;,是不能够在模板内使用的。

而在控制器内没有定义的变量,通过 $this->var = value的方式赋值,才能在模板内使用。

这里还是回到最原始的一个说法:控制器在sp内是一种语言结构。

2010-08-21 20:21:07

#7 azwl

这个问题一点也不诡异。

模板中使用的变量都先要注册到模板中

2010-08-21 21:11:16

#8 okbb

带熏彰的人回答问题,就是不一样。

2010-08-21 22:21:34

#9 jeffrey_shou

那我在Class 公共部分申明public $vardebug='abc';

在Class中debug函数中也申明$this->vardebug='abc';
模板却也不能显示其值,这是何故?

2010-08-22 11:11:44

#10 jeffrey_shou

换句话说,public $vardebug='abc';和$this->vardebug='abc';作用域有何不同,spView中也是通过模板引擎去匹配模板变量的,难道public $vardebug='abc';和$this->vardebug='abc';有不同?

2010-08-22 11:14:07

#11 jeffrey_shou

因为我用的phpide不能跟踪代码,故对于下魔术函数去获取Class级变量的过程不是很清楚
        public function __set($name, $value)
        {
                if(TRUE == $GLOBALS['G_SP']['view']['enabled'] && false !== $value){
                        $this->v->engine->assign(array($name=>$value));
                }
                $this->__template_vals[$name] = $value;
        }

2010-08-22 11:17:00

#12 jeffrey_shou

看明白了,sp的思路是通过魔术函数将模板值赋予到$this->__template_vals这个array中去,谢谢各位。

2010-08-22 11:19:07

#13 jake

看明白了,sp的思路是通过魔术函数将模板值赋予到$this->__template_vals这个array中去,谢谢各位。 ...
jeffrey_shou 发表于 2010-8-22 11:19
原理确是如此!:lol

2010-08-22 22:57:43