Home >Backend Development >PHP Tutorial >PHP 传值问题?
<code>function str_emoji($str,$cdn){ function empic($h){ $p=dechex(str_replace(array('',';'),'',$h)); return '<img src="'.%24cdn.%24p.'.png" alt="'.$h.'" class="smiley">'; //$cdn无法传进来!!! }; $str=preg_replace('#(\&\#[0-9]{6}\;)#ie','empic("\\1")',$str); return $str; }; echo str_emoji($str,$_POST['face']);</code>
$cdn无法传进函数??
<code>function str_emoji($str,$cdn){ function empic($h){ $p=dechex(str_replace(array('',';'),'',$h)); return '<img src="'.%24cdn.%24p.'.png" alt="'.$h.'" class="smiley">'; //$cdn无法传进来!!! }; $str=preg_replace('#(\&\#[0-9]{6}\;)#ie','empic("\\1")',$str); return $str; }; echo str_emoji($str,$_POST['face']);</code>
$cdn无法传进函数??
php中的闭包中变量的作用范围和js中的稍微有点不同。要使闭包函数外的变量作用于闭包函数内,可用use
关键字。参考下面一个例子:
<code class="php">function test($a, $b) { $t = function ($c) use ($a, $b) { return $a + $b + $c; }; return $t(3); } echo test(1, 2); // 6</code>
$cdn不在empix()的作用域下,它是str_emoji()的全局变量。要把$cdn 传进empix()。
<code class="php">//自己测试下 function str_emoji($str,$cdn){ function empic($h,$cdn){ $p=dechex(str_replace(array('',';'),'',$h)); return '<img src="'.%24cdn.%24p.'.png" alt="'.$h.'" class="smiley">'; //$cdn无法传进来!!! }; $str=preg_replace('#(\&\#[0-9]{6}\;)#ie','empic("\\1",'.$cdn.')',$str); return $str; };</code>