Как выполнить функцию, когда параметр является массивом или может быть вызван?

Посмотрите этот пример кода:

Я получаю ошибку:

Неустранимая ошибка: необработанная ошибка: невозможно использовать объект типа Closure в качестве массива в C: \ xampp \ htdocs \ dermaquality \ test.php: 11 Трассировка стека: # 0 C: \ xampp \ htdocs \ dermaquality \ test.php (20): test (Object (Closure)) # 1 {main} добавлен

$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['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
}
}
1

Другие решения

Других решений пока нет …