Arris
@Arris
Сапиенсы учатся, играя.

Как передать константу класса в замыкание/коллбэк внутри (статической) функции?

Есть у меня класс Foo, в котором объявлен статический метод, внутри которого при помощи preg_replace_callback обрабатывается аргумент. Исходные данные для обработки объявлены статично внутри фунции, но я хочу их объявить константой класса.

Сейчас:

class Foo {
const FGCOLORS = array( ... );

public static function Bar($message)
{
$fgcolors = array( ... );
// something code above
$pattern_font = '#(?<Full>\<font[\s]+color=[\\\'\"](?<Color>[\D]+)[\\\'\"]\>(?<Content>.*)\<\/font\>)#U';
$message = preg_replace_callback($pattern_font, function($matches) use ($fgcolors) {
            $color = $fgcolors[ $matches['Color'] ] ?? $fgcolors[ 'white '];
            return "\033[{$color}m{$matches['Content']}\033[0m";
        }, $message);
// something code below
}
}


Если сказать:

preg_replace_callback($pattern_font, function($matches) use (self::FGCOLORS) {

получаем ответ:

PHP Parse error: syntax error, unexpected 'self' (T_STRING), expecting '&' or variable (T_VARIABLE) in class.php on line N

Если сказать
preg_replace_callback($pattern_font, function($matches) use (FGCOLORS)


Разумеется, получаем:
PHP Parse error: syntax error, unexpected 'FGCOLORS' (T_STRING), expecting '&' or variable (T_VARIABLE) in class.php on line N


Как передать константу класса внутрь замыкания и можно ли это сделать без
$fgcolors = self::FGCOLORS;
..
$message = preg_replace_callback($pattern_font, function($matches) use ($fgcolors) {

?
  • Вопрос задан
  • 242 просмотра
Решения вопроса 1
DevMan
@DevMan
эмм.... зачем передавать, если итак доступно (если не использовать древние версии пыха)?
https://ideone.com/3a6mtT
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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