今天在做网站框架的View部分的时候,要对于安的phpnew模板引擎进行改造,要实现如下三种变量注入方式:
$array1 = array(
'0' => $subarray1(...),
'1' => $subarray2(...)
);
$array2 = array(
'title'=>'aaaaa',
'content'=>'asdffsdas'
);
$this->display('index',$array1); //多维数组 用于直接循环输出
$this->display('index','name',$value);//普通变量赋值
$this->display('index',$array2); //支持数组解析
而phpnew只支持两种变量注入
$tpl->assign('tpl','footer'); //变量注入
$tpl->assign(array('abc'=>'str','str'=>'php')); //数组解析
最终实现,是用到了获取变量名的方法
/**
* 获取变量名
*
* @param $string
* @return $string
*
* $test = "helo";
* $test2 = "helo";
* getVarName($test2);
*/
function getVarName(&$src){
//存储当前变量值
$save = $src;
//存储所有变量值
$allvar = $GLOBALS;
//在函数中不要直拉遍历$GLOBALS,会出现堆栈问题
foreach($allvar as $k=>$v){
//变量值相同,可能不是相同变量,因多个变量的值可能相同
if ($src == $v){
//改变当前变量$src的值
$src = 'change';
//如果$GLOBALS[$k]也跟着改变,那就是同一个变量。
if ($src == $GLOBALS[$k]){
//echo "\$$k name is $k
";
//还原变量值
$src = $save;
return $k;
}
}
}
}
参考http://blog.csdn.net/johnpanq/archive/2005/12/15/553328.aspx
可以使用extrac函数 。 http://php.net/extract
看了阁下博客中的方法,很好很强大,佩服