求助一个诡异问题,愿闻其详
发布于:2022-01-17 09:50:54
#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