php能把函數名作為參數傳遞嗎?


php能把函數名作為參數傳遞嗎?

 
 
0 投票
 
352 瀏覽

請問php能把函數名作為參數傳遞嗎?
類似javascript,lua里面一樣,函數名本來就是個變量,可以隨時傳遞。
比如js可以這樣寫:

function test(msg){ console.log(msg); } function a(b){ b(msg); } a(test); 
最新提問7月 2, 2014分類:程序員 | 作者:damon(3,590 分)
 
 
 

1個回答

 
 
0 投票
 
 
已采納

可以。方法主要介紹3種:
1.使用函數call_user_func()或者 call_user_func_array()

<?php function foobar($arg, $arg2) { echo __FUNCTION__, " got $arg and $arg2\n"; } class foo { function bar($arg, $arg2) { echo __METHOD__, " got $arg and $arg2\n"; } } // Call the foobar() function with 2 arguments call_user_func_array("foobar", array("one", "two")); // Call the $foo->bar() method with 2 arguments $foo = new foo; call_user_func_array(array($foo, "bar"), array("three", "four")); 

2.php本身是支持可變函數的,如同javascript一樣:
例一:

function foo($function) { $function(" World"); } function bar($params) { echo "Hello".$params; } $variable = 'bar'; foo($variable); 

例二:

<?php class Foo { function Variable() { $name = 'Bar'; $this->$name(); // This calls the Bar() method } function Bar() { echo "This is Bar"; } } $foo = new Foo(); $funcname = "Variable"; $foo->$funcname(); // This calls $foo->Variable() ?> 

具體內容可參考PHP手冊里的 可變函數 一章。

3.此外,使用匿名函數也能達到此目的,只是更復雜些。
詳細內容可參考 匿名函數

<?php // 一個基本的購物車,包括一些已經添加的商品和每種商品的數量。 // 其中有一個方法用來計算購物車中所有商品的總價格,該方法使 // 用了一個 closure 作為回調函數。 class Cart { const PRICE_BUTTER = 1.00; const PRICE_MILK = 3.00; const PRICE_EGGS = 6.95; protected $products = array(); public function add($product, $quantity) { $this->products[$product] = $quantity; } public function getQuantity($product) { return isset($this->products[$product]) ? $this->products[$product] : FALSE; } public function getTotal($tax) { $total = 0.00; $callback = function ($quantity, $product) use ($tax, &$total) { $pricePerItem = constant(__CLASS__ . "::PRICE_" . strtoupper($product)); $total += ($pricePerItem * $quantity) * ($tax + 1.0); }; array_walk($this->products, $callback); return round($total, 2);; } } $my_cart = new Cart; // 往購物車里添加條目 $my_cart->add('butter', 1); $my_cart->add('milk', 3); $my_cart->add('eggs', 6); // 打出出總價格,其中有 5% 的銷售稅. print $my_cart->getTotal(0.05) . "\n"; // 最后結果是 54.29 ?> PHP這個不行 
function k($a,$b,$c){ return $a .$b. $c; }; echo k('{"page":"shop/index","clientVersion":"10000","params":"userId:78312749;shop_id:112980512"}', 1438861083947,  function($ccc) { $ccc = $ccc . "ff"; } );
----------------------------------------- 這樣可以 function k($a,$b,$c){     return $a .$b. $c; }; echo k('{"page":"shop/index","clientVersion":"10000","params":"userId:78312749;shop_id:112980512"}', 1438861083947,     vvvv('fff') ); function vvvv($ccc) {             $ccc = $ccc . "ff";         } 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM