create_function建立的函數
使用php的內建函數create_function建立出來的函數。
create_function('$item','return $item*3;')
問一下各位 為什麼建立出來的函數 參數列表與函數體都要加上引號呢??
回複討論(解決方案)
string create_function ( string $args , string $code )
兩個參數都是字串
那提交給函數的參數不是也可以是變數嗎
因為 create_function 要求傳入2個字串參數
你的代碼等價於
function tmp($item) { return $item*3; }$b = array_map('tmp', $a);
用閉包就可以
$b = array_map(function($item) { return $item*3; }, $a);
那提交給函數的參數不是也可以是變數嗎
$item已經是提交給匿名函數的變數了。
$a=array(100,200,300);
$b=array_map(create_function('$item','return $item*3;'),$a);
你的意思是說('$item','return $item*3;')它們兩個只是create_function這個函數的兩個參數而已 它內部會自動建立這個函數是嗎
$a=array(100,200,300);
$b=array_map(create_function('$item','return $item*3;'),$a);
var_dump($b);
create_function要求傳入兩個字串 可是我這裡$a的參數是100 200 300 是數值型的呀 求協助
function tmp($item) { return $item*3; }
$b = array_map('tmp', $a);
寫成這樣,你是否有疑問呢?
create_function 要求傳入兩個字串
並不代表 create_function 產生的函數也要求傳入兩個字串
create_function 要求傳入的兩個字串,分別是:匿名函數的參數列表和函數體
$a=array(100,200,300);
$b=array_map(create_function('$item','return $item*3;'),$a);
var_dump($b);
create_function要求傳入兩個字串 可是我這裡$a的參數是100 200 300 是數值型的呀 求協助
你似乎混淆一個概念:
create_function是建立匿名函數,他本身(create_function)是一個函數,需要傳入的參數是字串。
而建立出來的函數的參數就是你要傳遞的參數,也就是函數的 形參 ,100,200,300是傳給建立出來的函數的 實參,由於建立的匿名函數內部是直接使用該參數的,所以傳進去是數值型,使用的就是數值型。如果傳遞的不是數值,例如是字串0123,由於有*操作符,所以會先轉化為數值然後操作:
請看:
$a=array(100,200,"011");
$b=array_map(create_function('$item','return $item*3;'),$a);
var_dump($b);
謝謝你 明白了。對了還有一個問題 我是初學者 有很多不明白地方 函數的形參都是以變數來定義的嗎
是的都是以變數的形式來定義的
非常感謝上面的高手們
默默收藏