В ответ на другой вопрос, который я задавал о регулярных выражениях, мне сказали использовать функцию preg_replace_callback
( Шаблон регулярных выражений PHP - найти все вхождения {{var}} ) в качестве решения моей проблемы. проблема. Это прекрасно работает, но теперь у меня есть вопрос, относящийся к области видимости переменной в функциях обратного вызова.
Функция, которая анализирует текст, является частью класса, но данные, которые я хочу использовать, хранятся локально в функции. Однако я обнаружил, что не могу получить доступ к этим данным из моей функции обратного вызова. Вот способы, которые я пробовал до сих пор:
- Реализовать обратный вызов как функцию частного класса, передав
'$this->callback_function'
в качестве параметра обратного вызова (не работает, php имеет фатальную ошибку)
- Реализация обратного вызова внутри функции, которая его использует (см. Пример ниже), но это тоже не сработало, потому что
$newData
не входит в область действия callback_function
Есть какие-нибудь идеи относительно того, как я могу получить доступ к $newData
внутри моей функции обратного вызова, желательно без использования глобальных переменных?
Большое спасибо.
Пример ниже для второй попытки (неправильно форматируется, когда я ставлю его после маркера)
public function parseText( $newData ) {
...
function callback_function( $matches ) {
... //something that uses $newData here
}
...
preg_replace_callback( '...', 'callback_function', $textToReplace );
}