dllweb
@dllweb

Как передать аргумент в callback функцию?

Всем доброго времени, столкнулся с небольшой проблемой, а именно версией PHP 5.2.17
Где не работает передача аргумента в callback функцию, пример следующий
$complette = preg_replace_callback("/\[~\]/", function() use(&$update_src){
static $i = 0;
return $update_src[$i++];
}, $marker);

В этом примере ищутся в тексте вхождения [~] и заменяются по очереди другими символами из массива $update_src
Если переписать пример вот так:
$complette = preg_replace_callback("/\[~\]/", 'callback_name_function', $marker);

То на этой дремучей версии php всё заработает но, конечно же не так как нужно, в функцию callback_name_function
не будут переданны нужные параметры. Как можно обойти это ограничение, p.s: обновить версию php не вариант, хоть и хотелось бы, но нет возможности
  • Вопрос задан
  • 2662 просмотра
Решения вопроса 1
LightAir
@LightAir
LA
Ответ на этот вопрос есть в stackoverflow

stackoverflow.com/questions/9550769/passing-additi...

До 5.3
class MyCallback {
    private $key;

    function __construct($key) {
        $this->key = $key;
    }

    public function callback($matches) {
        return sprintf('%s-%s', reset($matches), $this->key);
    }
}

$output = 'abca';
$pattern = '/a/';
$key = 'key';
$callback = new MyCallback($key);
$output = preg_replace_callback($pattern, array($callback, 'callback'), $output);
print $output; //prints: a-keybca-key


5.3 и выше (для лучшего понимания что к чему)
$output = 'abca';
$pattern = '/a/';
$key = 'key';
$output = preg_replace_callback($pattern, function ($matches) use($key) {
            return sprintf('%s-%s', reset($matches), $key);
        }, $output);
print $output; //prints: a-keybca-key
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы