今天在做网站框架的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<br/>"; //还原变量值 $src = $save; return $k; } } } }
参考http://blog.csdn.net/johnpanq/archive/2005/12/15/553328.aspx