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

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

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

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

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

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

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

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

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

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

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

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

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

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

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