2013-07-23 3 views
-1

Почему я не могу это сделать? Или я просто неправильно понимаю синтаксис?Функции на лету

$status = function() { 
    switch($job['status']) 
    { case "CREATED": return "Created by <b>$creator</b> on " . date("jS \o\\f M Y",$job['ts']); break; 
     case "APPROVAL": return "Pending Approval."; break; 
     case "DEFERRED": return "Marked as <b>Deferred</b> by <b>$creator</b>."; break; 
     case "COMPLETE": return "Marked as <b>Complete</b>."; break; 
    } 
} 

echo $status; 
+1

Какая ошибка возникает у вас? Что ты пытаешься сделать? Почему вы пытаетесь это сделать? – h2ooooooo

+0

echo $ status(); – maximkou

+0

Итак, вы пытаетесь назначить функцию переменной $ status, а затем эхо-переменную, верно? –

ответ

3

Anonymous functions требуется PHP> = 5.3.0

$status = function($job, $creator) { 
    switch($job['status']) 
    { case "CREATED": return "Created by <b>$creator</b> on " . date("jS \o\\f M Y",$job['ts']); break; 
     case "APPROVAL": return "Pending Approval."; break; 
     case "DEFERRED": return "Marked as <b>Deferred</b> by <b>$creator</b>."; break; 
     case "COMPLETE": return "Marked as <b>Complete</b>."; break; 
    } 
}; 

echo $status($job, $creator); 
+0

Почему это было приостановлено? Это совершенно правильно. – h2ooooooo

+0

Синтаксическая ошибка должна быть: '};' – bitWorking

1

То, что вы пытаетесь сделать, это замыкание (анонимная функция). Но это работает только в PHP> = 5.3.

Правильный синтаксис будет:

$status = function($job) { 
    // your switch 
}; 

echo $status($job); 

// or import $job to scope 

$job = array('status' => 'CREATED'); 
$status = function() use($job) { 
    // your switch 
}; 

echo $status(); 

По почему не просто сделать нормальную функцию?

function getStatus($job) { 
    // your switch 
} 

echo getStatus($job); 
+0

Это хороший момент. Тогда какова точка анонных функций? – Chud37

+0

@ Chud37 они полезны в качестве параметров обратного вызова, например. Вы можете передавать их как переменные и делать с ними другие причудливые вещи;) Но в вашем случае нормальная функция должна быть наилучшим способом. – bitWorking

Смежные вопросы