2013-02-18 65 views
3

如何將函數的引用作爲參數傳遞給另一個函數?我試圖實現一個回調,我需要通過函數returnProduct的引用。我該怎麼做?將函數的引用作爲參數傳遞

<?php 
class Tester { 
    public function calculate($var_1,$var_2,$var_3) { 
     $product = var_3($var_1,$var_2); 
     echo $product; 
    } 

    public function returnProduct($var_1,$var_2) { 
     return $var_1*$var_2; 
    } 
} 

$obj = new Tester(); 
$obj->calculate(100,2,$obj->returnProduct); 
+0

您使用的PHP的版本? – 2013-02-18 03:18:56

+0

@SiGanteng 5.4.7 – saplingPro 2013-02-18 03:19:59

+0

基本的PHP文件開始:http://www.php.net/manual/en/functions.arguments.php#functions.arguments.by-reference – Passerby 2013-02-18 03:20:00

回答

3

$product =行更改爲:

$product = call_user_func($var_3,$var_1,$var_2); 

而且你的電話線更改爲:

$obj->calculate(100,2,array($obj,'returnProduct')); 
+0

以及如何將'returnProduct'的引用傳遞給'calculate'作爲'$ var_3',然後使用該引用調用'returnProduct'? – saplingPro 2013-02-18 03:44:22

+0

@saplingPro這一切都在這個答案。 「call_user_func」的第一個參數是回調函數(在這種情況下爲'$ var_3') – Phil 2013-02-18 03:54:12

+0

@Phil我期待有'&'的東西傳遞給'calculate' – saplingPro 2013-02-18 04:06:20

1

如果你只是想使用的Tester的方法,你可以通過該方法名稱爲字符串,例如

public function calculate($var_1, $var_2, $var_3) { 
    $product = $this->$var_3($var_1, $var_2); 
    echo $product; 
} 

然後用

$obj->calculate(100, 2, 'returnProduct'); 

叫它寧可謹慎的一面,你可以檢查是否存在的方法,使用適當命名的method_exists()