@Muffasssa

Как переписать preg_replace_callback()?

Приветствую! Перешел на php7, возникла ошибка:
Warning: preg_replace_callback(): Requires argument 2, '$this->insertgold()', to be a valid callback in

Ошибка в этом месте:
public function onContentPrepare($context, &$row, &$params, $page = 0) {
$row->text = preg_replace_callback('|{gold}|e', '$this->insertgold()', $row->text);
return true;
}

Подскажите, как корректно переписать. Спасибо.
  • Вопрос задан
  • 89 просмотров
Решения вопроса 1
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
Callback можно задавать как
Как массив объекта и его метода: [$obj, 'myCallbackMethod']
Для статического метода: [MyClass::class, 'myCallbackMethod']
Другой способ для статического метода: 'MyClass::myCallbackMethod'

Пример для вас:
<?php

class TestListener
{
  //   сигнатуру тут лишнюю для простоты примера просто убрал
  public function onContentPrepare(&$row) {

    $row->text = preg_replace_callback('|{gold}|', [$this, 'insertgold'], $row->text);
  } 

  public function insertgold(array $matches)
  {
      return $matches[0] . 'Called';
  }
}


// Example
$string = new stdClass();
$string->text = 'TestText with gold  and gold ';

$listener = new TestListener();
$listener->onContentPrepare($string); 
var_dump($string->text ); //TestText with goldCalled  and goldCalled
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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