$string = "Some numbers: one: 1; two: 2; three: 3 end";$ten = 10;$newstring = preg_replace_callback( '/(\\d+)/', function($match) use ($ten) { return (($match[0] + $ten)); }, $string );echo $newstring;
回複討論(解決方案)
use 中文釋義 使用
function($match) use ($ten) { return (($match[0] + $ten)); }
讓變數 $ten 在匿名函數中可以被使用
相當於
$ten = 10;
function foo($match) {
global $ten;
return (($match[0] + $ten));
}
不過如果 $ten 不是全域變數的話就有麻煩了
php 5.3新增的閉包文法
閉包函數(匿名函數)可以從父範圍中繼承變數 任何此類變數都應該用 use 語言結構傳遞進去
use 中文釋義 使用
function($match) use ($ten) { return (($match[0] + $ten)); }
讓變數 $ten 在匿名函數中可以被使用
相當於
$ten = 10;
function foo($match) {
global $ten;
return (($match[0] + $ten));
}
不過如果 $ten 不是全域變數的話就有麻煩了
5.2中可以替換嗎?
如果不是全域變數可以就不能做了嗎?$ten;
php 5.3新增的閉包文法
閉包函數(匿名函數)可以從父範圍中繼承變數 任何此類變數都應該用 use 語言結構傳遞進去
5.2不能用嗎? 沒有替換方法嗎?
5.2 不能用你可以這樣
$string = "Some numbers: one: 1; two: 2; three: 3 end";$ten = 10;$newstring = preg_replace_callback( '/(\\d+)/', create_function('$match', "return \$match[0] + $ten;"), $string );echo $newstring;
5.2 不能用你可以這樣
$string = "Some numbers: one: 1; two: 2; three: 3 end";$ten = 10;$newstring = preg_replace_callback( '/(\\d+)/', create_function('$match', "return \$match[0] + $ten;"), $string );echo $newstring;
謝謝 ,