日期:2014-05-17  浏览次数:20377 次

讨论下PHP的变量注册以及使用。
先从smarty模板说起,众所周知如果用这个东东注册一个变量$smarty->assign($aaa,'123');
$smarty->display('a.tlp');
那么a页面就能使用$aaa这个变量呢,我想问的是。如果不用任何模板,我在a页面public一个变量,如何在b页面使用他?? 如果我用<?php $this->aaa;?>这样的方式,是否效率更高? 毕竟模板引擎也是用自己的语言逻辑实现这个过程。。
本人水平不高,想搞清楚这一点,求赐教
------解决方案--------------------
$smarty->assign($aaa,'123');
$smarty->display('a.tlp');

等价于
$a = 234;
?>
...
<?php echo $a ?>
------解决方案--------------------
我給你一個function你看看或許對你有幫助

/**
通用範本處理引擎
參數:
調用範本並重組預定義的範本變量$Arr,讓每個key成為一個範本變量(key如果是數字將會被unset)
說明:
範本檔案名(多個名稱用*分隔),範本變量,是否直接輸出內容,範本路徑
不直接返回的狀況主要用於返回編譯之後的範本內容,其目的是爲了緩存
返回:
如果直接顯示則沒有任何返回值,如果不直接顯示則返回編譯後的範本
用法:
//自定義範本變體:範本里調用時可用的變量為:$a;$b
$out=Array('a'=>'abc',1=>'fff','b'=>Array('ee'=>'我','是'));

//把前臺的兩個範本編譯之後直接輸出
T('head*index',$out);

//把前臺的範本編譯之後直接輸出
T('test',$out,False);

//把後臺範本編譯之後返回給調用對象
T('test',$out,True,'adm');
/**/
Function T($Tpl,&$Arr=Array(),$IsShow=True,$Dir='usr') {
IF($Tpl=='') {Return ;}

Foreach($Arr as $k=>$v) {
IF(Is_numeric($k)) {
Unset($Arr[$k]);
IF(SYS_DEBUG) {Error('FT0001',False);}
Continue;
}
$$k=$v;
}Unset($Arr);

IF(!$IsShow) {//如果不允許直接輸出,則開啟緩衝抓取內容
OB_start();OB_clean();
}

$Tpl=Str2Arr($Tpl,'*',True,True,False);
Foreach($Tpl as $k=>$v){
//範本檔案及路徑
$FTpl=SYS_ROOT.$GLOBALS['SYS_TPL'.StrToUpper($Dir).''].$v.'.php';

//範本是否存在
IF(!File_Exists($FTpl)) {Exit('Error:Template '.$FTpl);}

//載入範本
Require($FTpl);
Unset($FTpl);
}Unset($Tpl,$Dir);

IF(!$IsShow) {
$m=Ob_get_contents(); // 取得緩存區內容
OB_end_clean(); // 清理原有內容OB_clean();
OB_end_flush();
Unset($IsShow);
Return $m;
}
}