Это единственный, уродливый способ вызвать метод с дополнительным аргументом в ‘preg_replace_callback’?

В PHP функция pregreplacecallback используется для замены с использованием регулярного выражения с обратным вызовом функции. Метод вызывается для каждого найденного совпадения регулярного выражения, и именно здесь возникает вопрос о возможности передачи дополнительных аргументов.

Существует несколько подходов к решению данной проблемы. Рассмотрим каждый из них более подробно.

  1. Использование анонимных функций:

Вы можете воспользоваться анонимной функцией, чтобы создать замыкание с необходимыми аргументами и передать ее в качестве аргумента в pregreplacecallback. Пример:

$arg = 'additional argument';
$result = preg_replace_callback('/pattern/', function ($match) use ($arg) {
    // доступ к дополнительному аргументу $arg
    return // замена
}, $subject);

Используя ключевое слово use, мы передаем дополнительный аргумент $arg внутрь анонимной функции.

  1. Использование объектов и методов:

Если вам нужно вызывать метод с дополнительным аргументом, вы можете обернуть метод в объект или статический класс и передать его в pregreplacecallback. Пример:

class MyClass {
    public function myMethod($match, $arg) {
        // дополнительная логика с использованием $arg
        return // замена
    }
}

$myObj = new MyClass();
$result = preg_replace_callback('/pattern/', [$myObj, 'myMethod'], $subject);

Метод myMethod будет вызываться для каждого совпадения регулярного выражения, и дополнительный аргумент $arg может быть использован внутри метода.

  1. Использование статических методов:

Если вы не хотите создавать объект, вы также можете использовать статические методы и передать их в pregreplacecallback. Пример:

class MyStaticClass {
    public static function myMethod($match, $arg) {
        // дополнительная логика с использованием $arg
        return // замена
    }
}

$result = preg_replace_callback('/pattern/', ['MyStaticClass', 'myMethod'], $subject);

В данном случае мы передаем имя класса и имя статического метода в качестве параметров pregreplacecallback.

В итоге, есть несколько подходов к вызову метода с дополнительным аргументом в pregreplacecallback. Вы можете воспользоваться анонимными функциями, объектами/методами или статическими методами, в зависимости от общей структуры вашего кода и необходимой логики.