Закрытие вызывает синтаксическую ошибку в php-5.2 - PullRequest
2 голосов
/ 25 июня 2011

Я выполняю следующий код из этой записи :

preg_match_all("/'(.+)' ((\w+)\(? ?(\d*) ?\)?)/", $sql, $_matches, PREG_SET_ORDER);
$matches = array_map(function($v) {return array(trim($v[2]), $v[1]);}, $_matches);

Но я получаю следующую ошибку:

Parse error: syntax error, unexpected T_FUNCTION, expecting ')' in SqlParser.php on line 29

Я потратил некоторое время, чтобы решитьэто, но я не могу найти решение.

Может кто-нибудь сказать мне, что не так?

Ответы [ 2 ]

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

Я предполагаю, что вы используете версию PHP менее 5.3, которая не поддерживает замыкания (вы подтвердили это в ваших комментариях).Код ниже должен работать.Я только что преобразовал анонимную функцию в обычную функцию.

function map_cb($v){
    return array(trim($v[2]), $v[1]);
}


preg_match_all("/'(.+)' ((\w+)\(? ?(\d*) ?\)?)/", $sql, $_matches, PREG_SET_ORDER);
$matches = array_map("map_cb", $_matches);
2 голосов
/ 25 июня 2011

Если вы не используете php 5.3, вы не можете использовать анонимную функцию, подобную этой. Согласно документации php для обратных вызовов ,

Начиная с PHP 5.3.0 возможно также передать закрытие обратному вызову параметр.

Вы можете использовать create_function() вместо создания anon. функции, и это будет работать до PHP 5.3. Или используйте ответ GWW, это тоже должно сработать.

В противном случае, если вам интересно узнать больше о anon. функции в PHP 5.3+, вы можете прочитать их php документы .

...