2012-09-05 38 views
5

有時,在初始化變量時,您想要傳遞它們的值,這些值太複雜,無法在單個命令中計算,因此您通常先計算一個虛擬變量,然後傳遞其值,或者在其他地方定義一個函數,並將其返回值傳遞給我們的變量。php使用匿名函數動態地計算變量

我的問題(希望)是,是否有可能改爲使用匿名函數計算變量?

例如,而不是使用這樣的:

$post = get_post(); 
$id = $post->ID; 

$array = array(
    'foo' => 'hi!', 
    'bar' => $id 
); 

現在讓我們使用這樣的事情:

$array = array(
    'foo' => 'hi!', 
    'bar' => (function(){ 
     $post = get_post(); 
     return $post->ID; 
    }) 
); 

代碼是完全以隨機的。

+2

你試過了嗎? – PeeHaa

+1

「代碼總是隨機的。」一個非常不可能的字母組合來自任何種類的隨機生成 – 2012-09-05 00:06:12

+0

@PeeHaa是的,它返回Closure :: __ set_state(array( )),因爲閉包是Closure類的實例。 – Bakaburg

回答

1

在你的榜樣,下面會做就好了:

$array = array('foo'=>'hi!','bar'=>(get_post()->ID)); 

然而,考慮到你的問題是多一點開放式的,而不是具體到您的代碼段,你會發現這個stackoverflow answer acceptable

$a = array('foo' => call_user_func(
    function(){ 
     $b = 5; 
     return $b; 
    }) 
); 
var_dump($a); 
+0

完全是它! – Bakaburg

+0

一方面的問題:爲什麼你把$之前的ID放入(get_post() - > $ ID)?和括號是否需要? – Bakaburg

+1

@Bakaburg我在ID之前的$壞了,我已經用適當的語法更新了帖子。也最不可能需要parens,我只是沒有測試我的代碼,並安全地玩它:) – zamnuts