Есть у меня класс 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) {
?