2014-03-04 94 views
0

我試圖通過一個數組來調用PHP函數,像這樣:呼叫直接從PHP陣列功能

$x = (object) array(
    "one" => "value", 
    "two" => "value2", 
    "three" => function() { 
     return "return_value"; 
    } 
); 

echo($x->three()); 

從這個我收到的錯誤:

<b>Fatal error</b>: Call to undefined method stdClass::three() 

我搜索了一下並找不到任何文件,但我跑這通過

php -l filename.php 

其中沒有發現語法錯誤。

我想知道我想要做什麼是可能的(最終目標是用數組中的參數調用函數)。 有沒有人可以對此有所瞭解?

感謝

注意,我也嘗試:

function foo() { 
    return "bar"; 
} 
$x = (object) array(
    "foo" => foo 
); 
... 

這導致了同樣的結果。

回答

2

類型創建被歸類爲一個匿名函數並且由Closure類表示,並且因此方法的繼承了其性質,其中包括調用由Amal Murali指定的方法。

你必須調用這個函數的方法有兩種:

  1. echo $x->three->__invoke();
  2. echo call_user_func($x->three);

如果需要傳遞參數,你可以打電話$x->three->__invoke($args);call_user_func($x->three, $args1, $args2);

3

使用數組,而不是一個對象:

$x = array(
    "one" => "value", 
    "two" => "value2", 
    "three" => function() { 
     return "return_value"; 
    } 
); 

要調用lambda函數,你可以這樣做:

echo $x['three'](); 

Demo


如果你真的必須使用對象,那麼你可以做到以下幾點:

$x = array(
    "one" => "value", 
    "two" => "value2", 
); 

$obj = (object) $x; 
$obj->three = function() { 
    return "return_value"; 
}; 

要調用該函數:

echo $obj->three->__invoke(); 

Demo