本帖最后由 ankyliu 于 2010-07-01 17:26:09 编辑

解决方案 »

  1.   

    你怎么知道var1,var2,var3 都是全局变量?这个是值对形式.
      

  2.   


    Smarty之前用的不多,Jlzan能不能举几个不是全局的例子看看?
      

  3.   

    =$GLOBALS[$name[$i]];这个传值可能会出问题
    你这样改,感觉不到多大简化
      

  4.   

    $a=2;
    function a(){
    gloabl $smary;
    $a=1;
    $smarty->assign('a');//这个是1,还是2呢?
    }
      

  5.   

    global  纯手写,容易出错.
      

  6.   

    function doSomething()
    {
     $id=1;
     $GLOBALS['tpl']->assign('id', $id);//这个id就不是全局
    }
      

  7.   


    $tpl->assign("var1",$var1); 
    这种写法,如果模板中的变量很多,写起来也不轻松吧? 我是刚用Smarty,所以不了解,还望指教
      

  8.   

    看来想偷点懒真不容易啊。。之前想通过取得函数参数原变量名assign($a,$b,$c,$d...)的方法,一直没找到这个办法,未遂。。后想到用这个方法。看来还是有缺陷。。
      

  9.   

    不知道有没有什么方法可以在函数内部得到所传入参数的变量名字??
    可以的话,你这个改改就好办多了。
    function test11(){
    echo "<per>";
    var_dump(func_get_args());
    var_dump(func_num_args());
    var_dump(func_get_arg(1));
    //前面都只能得到参数个数和值,就是不知道怎么得到参数的变量名称,比如这里得到a,b,c
    }
    $a="123";
    $b="456";
    $c="789";
    test11($a,$b,$c);
      

  10.   

    不错,写起来并不轻松!
    不过你 $tpl->assign("var1,var2,var3");  并没有少写什么
    你假定数据是全局的,但是要保障这个“全局”又要有多少开销呢?而真正有意义的工作是:从模板文件创建程序代码,于是你只需要写计算数据的代码了
      

  11.   

    数组才是王道. $GLOBALS不是这样玩的, 给你一个数组. function parse_var(){
    $list = array();
    $ietm = unserialize('a:77:{i:0;s:7:"GLOBALS";i:1;s:4:"_ENV";i:2;s:13:"HTTP_ENV_VARS";i:3;s:15:"ALLUSERSPROFILE";i:4;s:18:"CommonProgramFiles";i:5;s:12:"COMPUTERNAME";i:6;s:7:"ComSpec";i:7;s:16:"FP_NO_HOST_CHECK";i:8;s:20:"NUMBER_OF_PROCESSORS";i:9;s:2:"OS";i:10;s:4:"Path";i:11;s:7:"PATHEXT";i:12;s:22:"PROCESSOR_ARCHITECTURE";i:13;s:20:"PROCESSOR_IDENTIFIER";i:14;s:15:"PROCESSOR_LEVEL";i:15;s:18:"PROCESSOR_REVISION";i:16;s:12:"ProgramFiles";i:17;s:11:"SystemDrive";i:18;s:10:"SystemRoot";i:19;s:4:"TEMP";i:20;s:3:"TMP";i:21;s:11:"USERPROFILE";i:22;s:17:"VBOX_INSTALL_PATH";i:23;s:6:"windir";i:24;s:13:"AP_PARENT_PID";i:25;s:16:"uchome_loginuser";i:26;s:15:"supe_cookietime";i:27;s:9:"supe_auth";i:28;s:14:"Mwp6_lastvisit";i:29;s:18:"Mwp6_home_readfeed";i:30;s:10:"Mwp6_smile";i:31;s:16:"Mwp6_onlineindex";i:32;s:8:"Mwp6_sid";i:33;s:12:"Mwp6_lastact";i:34;s:9:"PHPSESSID";i:35;s:11:"HTTP_ACCEPT";i:36;s:12:"HTTP_REFERER";i:37;s:20:"HTTP_ACCEPT_LANGUAGE";i:38;s:15:"HTTP_USER_AGENT";i:39;s:20:"HTTP_ACCEPT_ENCODING";i:40;s:9:"HTTP_HOST";i:41;s:15:"HTTP_CONNECTION";i:42;s:11:"HTTP_COOKIE";i:43;s:4:"PATH";i:44;s:7:"COMSPEC";i:45;s:6:"WINDIR";i:46;s:16:"SERVER_SIGNATURE";i:47;s:15:"SERVER_SOFTWARE";i:48;s:11:"SERVER_NAME";i:49;s:11:"SERVER_ADDR";i:50;s:11:"SERVER_PORT";i:51;s:11:"REMOTE_ADDR";i:52;s:13:"DOCUMENT_ROOT";i:53;s:12:"SERVER_ADMIN";i:54;s:15:"SCRIPT_FILENAME";i:55;s:11:"REMOTE_PORT";i:56;s:17:"GATEWAY_INTERFACE";i:57;s:15:"SERVER_PROTOCOL";i:58;s:14:"REQUEST_METHOD";i:59;s:12:"QUERY_STRING";i:60;s:11:"REQUEST_URI";i:61;s:11:"SCRIPT_NAME";i:62;s:8:"PHP_SELF";i:63;s:12:"REQUEST_TIME";i:64;s:4:"argv";i:65;s:4:"argc";i:66;s:5:"_POST";i:67;s:14:"HTTP_POST_VARS";i:68;s:4:"_GET";i:69;s:13:"HTTP_GET_VARS";i:70;s:7:"_COOKIE";i:71;s:16:"HTTP_COOKIE_VARS";i:72;s:7:"_SERVER";i:73;s:16:"HTTP_SERVER_VARS";i:74;s:6:"_FILES";i:75;s:15:"HTTP_POST_FILES";i:76;s:8:"_REQUEST";}');
    $temp_list = (array) $GLOBALS;
    foreach ($temp_list as $key => $val){
    if(in_array($key,$ietm) === false)
    $list[$key] = $val;
    }
    return (array) $list;
    }在结束时使用, 可以抓取到所有的变量,数组, 类,及资源.