2011-11-24 41 views
0

我需要從一個函數中調用一個方法,所以我必須通過它作爲像這樣的數組:與基於數組對象方法調用傳遞參數

array($this, 'display_page'); 

但我需要與它一起傳遞參數。這可能嗎?

編輯 - 新方法 - 仍然沒有工作。

我現在嘗試傳遞一個匿名函數,而不是數組回調。

function(){MyClass::display_page($display);} 

正是如此編輯的功能:

class MyClass{ 

static function display_page($arg = false) 
    { 
     if($arg){ 
     echo $arg; 
     } else { 
     echo "Nothing to report!"; 
     } 
    } 
} 

,但我得到的是無報告!

編輯問題在於Wordpress中回調的使用方式(沒想到它是相關的,結果是這樣)。已投票結束。

+0

請說明。你需要傳遞參數和回調函數引用?這是...不尋常的。 – deceze

+2

您不需要在PHP中使用'&'來回調對象方法。 – hakre

+0

@deceze是的,它可以是這樣的,也可以寫幾個不同的回調函數,只有一行更改。 –

回答

0

如果你看看call_user_func,你可以看到它有第二個可選參數叫做參數。

mixed call_user_func (callback $function [, mixed $parameter [, mixed $... ]]) 

使用它。

還是喜歡在the comment on call_user_func提到你能做到這一點的骯髒的方式

$method_name = "AMethodName"; 
$obj = new ClassName(); 
$obj->{$method_name}(); 
+0

此方法不起作用,因爲它調用該函數,而不是傳遞對它的引用。 –

0

也許這些方針的東西就可以了:

class Foo { 

    public function callMe() { 
     $args = func_get_args(); 
     var_dump($args); 
    } 

    public function getCallback() { 
     $that = $this; 
     return function ($oneMoreArg) use ($that) { 
      $that->callMe(1, 2, $oneMoreArg); 
     }; 
    } 

} 

$foo = new Foo; 
$callback = $foo->getCallback(); 
$callback(3); 

如果你沒有運行PHP 5.3,你最好可以做的可能是返回一個「自定義回調數組」和「自定義調用它」:

$callback = array($this, 'callMe', 1, 2); 

$args = array_splice($callback, 2); 
$args[] = 3; 
call_user_func_array($callback, $args);