php的內建函數create_function建立出來的函數 參數列表與函數體引號問題

來源:互聯網
上載者:User
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);

謝謝你 明白了。對了還有一個問題 我是初學者 有很多不明白地方 函數的形參都是以變數來定義的嗎

是的都是以變數的形式來定義的

非常感謝上面的高手們

默默收藏

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.