PHP: функция в preg_replace сообщает, что функция уже объявлена ​​

Функция:

function doSomething($url){
    $url = "{$url}";
    return $url;
}

Замена

$content = preg_replace("#(http:\/\/+[^\s]+)#ie","doSomething('$1')", $content);

Проблема:

Неустранимая ошибка: невозможно повторно объявить doSomething () (ранее объявлено в http://example.com/test.php:69 ) в http://example.com/test.php в строке 69

Примечание: Текущая функция не представляет мою реальную функцию, я знаю, что для этой ситуации мне не нужны никакие функции, но мне нужен мой реальный код. Но это также лучший пример.

1
задан codaddict 30 August 2010 в 15:03
поделиться

2 ответа

Ну, это потому, что функция уже была определена в предыдущем вызове функции (в этом заключается опасность объявления функции внутри другой функции). Есть несколько вариантов.

Условное объявление функции

if (!function_exists('doSomething')) {
    function doSomething($url)...
}

Объявление анонимной функции:

PHP 5.3+:

$callback = function($url) {
    //...
}

PHP 5.2+:

$callback = create_function('$url', '//...');

Использование класса:

class foo {
    public function doReplace($string) {
        $callback = array($this, 'doSomething');
        // Do your matching here
    }
    public function doSomething($url) {
        //...
    }
}

Кроме того, я бы не советовал использовать e модификатор для регулярного выражения (это просто не обязательно, и в основном просто eval, что обычно рассматривается как зло). Вместо этого вы должны просто использовать preg_replace_callback:

Предполагая, что $callback является допустимым обратным вызовом:

$callback = function($match) {
    $url = $match[1];
    //... Do stuff here
}
$string = preg_replace_callback($regex, $callback, $string);
4
ответ дан 2 September 2019 в 21:43
поделиться

Ну... в сообщении об ошибке говорится о проблеме. У вас есть объявление функции doSomething() несколько раз.

Просмотрите строку 69 файла test.php и попробуйте прокомментировать объявление.

-2
ответ дан 2 September 2019 в 21:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: