2016-10-03 31 views
0

看看這個例子代碼:如何在參數爲數組或可調用時執行函數?

,我發現了錯誤:

Fatal error: Uncaught Error: Cannot use object of type Closure as array in C:\xampp\htdocs\dermaquality\test.php:11 Stack trace: #0 C:\xampp\htdocs\dermaquality\test.php(20): test(Object(Closure)) #1 {main} thrown in

$array = array(
    'hello' => function() { 
     echo "HEllo world"; 
    } 
); 

function test($func) 
{ 
    if (is_callable($func['hello'])) { 
     $func['hello'](); 
    } 
    else { 
     $func(); 
    } 
} 

echo "Executing 1 <br/>"; 
test($hello = function() {"Hello world";}); 
echo "Executing 2 <br/>"; 
test($array['hello']); 
exit; 

我怎麼能說$func如果$func是功能或$func['hello']是功能?

謝謝。

+0

嘗試改變,如果做反:if(is_callable($ func))$ func;其他$ func ['hello'](); –

回答

1

問題是if (is_callable($func['hello'])) {,因爲你不知道,如果$func是一個數組..順便說一句,你不把數組作爲參數test($array['hello']);你把剛纔的功能...

function test($func) 
{ 
    if (is_callable($func)) { 
     $func(); 
    } 
    else if (is_array($func)){ 
     if(isset($func['hello']) && is_callable($func['hello'])){ 
      $func['hello'](); 
     }else{ 
      // unknown what to call 
     } 
    }else{ 
     // unknown what to call 
    } 
} 
+0

這很好,但我不明白'is_array'首先檢查的區別是什麼,'is_callable'如何知道is_array被調用? –

+1

'is_callable'只是函數,在第一個'is_callable($ func)'中不知道是否另一個被調用'不重要變量'$ func'中的值是什麼,因爲函數'is_callable'將檢查它是否可調用,你使用'$ func ['hello']'你必須知道'$ func'是一個數組,這就是爲什麼 –

+1

只是變量的值將通過參數傳遞給函數,所以'some_function([]);'與'$ array = []; some_function($ array);'在函數 –

相關問題