1
realpg 2015-09-20 15:37:18 +08:00
最简单的办法直接 eval ……
|
3
guoqiao 2015-09-20 15:59:40 +08:00 via iPhone
这不就是 django 或 jinja 的模板语法么
|
4
foccy 2015-09-20 16:05:02 +08:00
我觉得 extract 这个函数是不是能解决的这个问题?
|
6
feiyuanqiu 2015-09-20 17:08:52 +08:00
get_defined_vars () 函数会获取到当前作用域已定义的变量及全局变量,返回一个键为变量名,值为变量值的数组
你可以用这个函数实现你的需求 $_definedVars = get_defined_vars (); if (asset ($_definedVars[$name])) { // blabla... } |
7
CNCCTV OP @feiyuanqiu
这是在函数里的替换字符串转成变量,请问怎么做? ```php $datas = preg_replace_callback ('/{{([\w\W]*?)}}/im', function ($matches ) { $matches=$matches[1]; return $matches; }, $datas[0]); return $datas; ``` |
8
CNCCTV OP @feiyuanqiu 使用 print_r (get_defined_vars ());显示出来
Array ( [matches] => Array ( [0] => {{name}} [1] => name ) ) |
9
feiyuanqiu 2015-09-20 18:12:00 +08:00 via iPhone
|
10
feiyuanqiu 2015-09-20 18:14:17 +08:00 via iPhone
@CNCCTV 匿名函数是单独的作用域,要使用外部作用域的变量需要用 use 传进去
|
11
CNCCTV OP @feiyuanqiu 没看懂。。。
|
12
feiyuanqiu 2015-09-20 18:56:22 +08:00
@CNCCTV 改了下你的代码
// 把会用到的变量都声明好 $vars = array ( 'name' => 'blabla', ); $result = preg_replace_callback ('/{{([\w\W]*?)}}/im', function ($matches ) use ($vars ) { return isset ($vars[$matches[1]]) ? $vars[$matches[1]] : ''; }); |
13
CNCCTV OP @feiyuanqiu 还要声明啊?不是自动获取全部变量吗?
|
14
CNCCTV OP @feiyuanqiu 现在算是做好了,通过传参数方式,但是还有一个新问题,如果替换的变量是一个数组,返回输出会报错,这怎么办啊?
|