2014-01-24 30 views
2

我想調用函數存儲在數組內,但在我做之前我想檢查它是否是函數,字符串或任何其他類型。功能存儲在陣列內

請看看我的代碼

$a=new stdClass(); 
$array = array(function() { 
return "Bhavik Patel"; 
}, "1213",$a); 

foreach ($array as $key => $value) { 
    if (is_object($value)) { 
     echo $value() . "<br/>"; 
    } else { 
     echo $value . "<br/>"; 
    } 
} 

通過這樣做,我可以檢查是否值對象,然後我打電話,但如果我通過對象它給(PF當然這會給錯誤)

我的意圖是找到價值是功能,然後調用它。

+0

親愛的我知道如何在數組中存儲函數。請仔細閱讀我想要做的事情 –

+0

@Jack在我關閉之後實現:) –

+0

您現在可以刪除重複標記嗎? –

回答

3

要特別檢查匿名函數可以對\Closure測試值,像這樣:

if ($value instanceof \Closure) { 
    echo $value(), "\n"; 
} else { 
    echo $value; 
} 

is_callable()的問題是,如果你的價值是"explode",它將返回true這顯然不是你想要的。

+0

什麼是爆炸? –

+0

@BhavikPatel嘗試'$ value ='explode'; $ value();'你會看到我的意思:) –

+0

確定了.. .. ... –

0

is_callable()會幫助你,但是請注意,如果你傳似數組中此

array('object or class','method') 

is_callable()返回true,那麼你最好檢查一下是不是數組

if (is_callable($value) && !is_array($value)) {.....} 

看到is_callable

+0

一個字符串也可以是可調用的:) –

+0

@Jack yeap ,我想念 – leo108

0

在PHP嘗試[is_callable][1]。我已經測試過它,它適用於我。