PHP анонимная функция вызывает синтаксическую ошибку на некоторых установках - PullRequest
0 голосов
/ 20 июня 2011

У меня следующий код:

    $file_check_method_func = function($n) {
        $n = absint($n);
        if(1 !== $n) { $n = 0; }
        return $n;
    };
    $valid['file_check_method'] = array_map($file_check_method_func, $input['file_check_method']);

Это работает на моей установке PHP 5.3.5, но когда я запускаю этот код на установке PHP 5.2.15, я получаю:

Parse error: syntax error, unexpected T_FUNCTION in /home/xxxx/public_html/xxxx/xxxxxxx/wp-content/plugins/wordpress-file-monitor-plus/classes/wpfmp.settings.class.php on line 220

Строка 220, являющаяся первой строкой приведенного выше кода.

Итак, мой вопрос (-ы), есть ли что-то неправильно написанное в моем коде, которое может привести к этой ошибке?Если нет, это из-за ошибки или не поддерживаемой функции в PHP 5.2.15?Если да, то как я могу написать приведенный выше код, чтобы не выдавать ошибку?

Приведенный выше код входит в функцию класса.

Ответы [ 3 ]

7 голосов
/ 20 июня 2011

Анонимные функции - это функция, добавленная в 5.3

Для более ранних версий создайте именованную функцию и назовите ее по имени. Eg.:

function file_check_method_func($n) {
    $n = absint($n);
    if(1 !== $n) { $n = 0; }
    return $n;
}
$valid['file_check_method'] = array_map('file_check_method_func', $input['file_check_method']);

или внутри класса:

class Foo {
  protected function file_check_method_func($n) {
    $n = absint($n);
    if(1 !== $n) { $n = 0; }
    return $n;
  }
  function validate($input) {
    $valid = array();
    $valid['file_check_method'] = array_map(array($this, 'file_check_method_func'), $input['file_check_method']);
    return $valid;
  }
}

Я бы настоятельно рекомендовал не полагаться на create_function.

3 голосов
/ 20 июня 2011

Синтаксис для анонимных функций в этом примере может использоваться только в PHP> = 5.3. До PHP 5.3 анонимные функции можно создавать только с create_function().

2 голосов
/ 20 июня 2011

Добавлены анонимные функции, использующие этот синтаксис функции 5.3. Но вы можете определить анонимные функции, используя http://www.php.net/manual/en/function.create-function.php

...