Это исключительно схематично описано в руководстве http://www.php.net/manual/en/functions.anonymous.php в разделе "Затворы".
Что делает use ($var)
, так это разделяет переменную между анонимной функцией и родительской областью действия. Обычно он просто сохраняет первоначальное значение и превращает этот параметр практически в статическую переменную.
Чтобы превратить его в совместимую с PHP 5.2 конструкцию, всегда лучше превратить замыкания в статические функции обратного вызова. Вместо = function () {}
напишите обычную декларацию:
function cb_event_filter_week($event_object) {
Очень нехороший способ - использовать переменную closure / use
через глобальную область видимости. Для этого переписать функцию на
function cb_event_filter_week($event_object) {
global $week_events;
Вы должны будете сделать то же самое в родительской функции, а также для ее инициализации! И очень желательно дать этой переменной значительно более уникальное имя. Более хорошей альтернативой здесь была бы статическая переменная, если вам нужно только вызвать эту функцию обратного вызова в одной точке (!) В потоке приложения:
function cb_event_filter_week($event_object) {
static $week_events = 0;
Действительно зависит от того, как оно используется. Но в любом случае вы можете написать = array_filter($event_objects, "cb_event_filter_week")
для их использования в PHP 5.2