Что не так с этой функцией PHP - PullRequest
1 голос
/ 28 апреля 2010

Я новичок в PHP и регулярное выражение. Я собирался через несколько онлайн-примеров и пришел с этим примером:

<?php
echo preg_replace_callback('~-([a-z])~', function ($match) {
    return strtoupper($match[1]);
}, 'hello-world');
// outputs helloWorld
?>

в php.net, но, к моему удивлению, это не работает и продолжает получать ошибку:

PHP Parse error:  parse error, unexpected T_FUNCTION

Почему появляется ошибка?

Ответы [ 4 ]

6 голосов
/ 28 апреля 2010

Вы используете PHP Анонимные функции : функции, у которых нет имени .

Когда я запускаю вашу программу, я не получаю ошибки. Может быть, вы пытаетесь это на PHP < 5.3.

Анонимные функции доступны начиная с PHP 5.3.0.

Если PHP версия создает проблему, вы можете переписать программу на без использования Анонимные функции как:

<?php

// a callback function called in place of anonymous function.
echo preg_replace_callback('~-([a-z])~','fun', 'hello-world');

// the call back function.
function fun($match) {
    return strtoupper($match[1]);
}

?>
2 голосов
/ 28 апреля 2010

Этот пример для PHP 5.3. Вы, вероятно, используете что-то более старое (например, PHP 5.2).

Попробуйте вместо этого:

<?php
function callback($match) {
    return strtoupper($match[1]);
}
echo preg_replace_callback('~-([a-z])~', 'callback', 'hello-world');
1 голос
/ 28 апреля 2010

Это должно работать на версиях до 5.3:

echo preg_replace_callback(
        '/-([a-z])/',     
        create_function( '$arg', 'return strtoupper($arg[1]);' ),
        'hello-world'
     );

Привет

БВУ

1 голос
/ 28 апреля 2010

Используете ли вы версию до PHP 5.3.0? Анонимные функции не поддерживаются в версиях, предшествующих этой.

Вы можете проверить свою версию на странице phpinfo .

...