2016-05-11 2 views
-1

я хочу написать функцию встроенного в PHP, как показано нижеPHP встраиваемая функция как .net

Forexample:

$c = getCountry(); 
$b = getZones(); 
$a = [ 
     'x' => function() use ($c, $b) 
      { 
       if (isset($c[0])) 
        return getZonesByCountryId($c[0]['id']); 
       else 
        return $b; 
      } 
    ]; 

я получаю эту ошибку: «Объект класса закрытия не может быть преобразован в строку» Я пишу встроенную функцию в .net, как я сделал это выше. пожалуйста помогите !!!

+0

* Этот * код не бросает * это * ошибка. Что-то, что пытается «эхо» значение '$ a ['x']' позже, выдает эту ошибку. Ожидаете ли вы, что функция будет выполнена немедленно, а ее * результат * назначен на 'x' ...? – deceze

+0

Какую версию php вы используете? –

+0

Я использую его 5.5.35 – maviofis

ответ

2

Значение 'x' будет a; сама анонимная функция будет назначена 'x', а не ее возвращаемое значение. Для того, чтобы присвоить возвращаемое значение, необходимо фактически выполнить функцию:

$a = ['x' => call_user_func(function() use ($c, $b) { 
      if (isset($c[0])) { 
       return getZonesByCountryId($c[0]['id']); 
      } else { 
       return $b; 
      } 
     })]; 

Однако, в данном случае это не имеет абсолютно никакого смысла использовать такие сложные решения, когда это будет делать только штраф:

$a = ['x' => isset($c[0]) ? getZonesByCountryId($c[0]['id']) : $b]; 
Смежные вопросы