У меня есть статическое поле в классе с регулярным выражением. Для этого регулярного выражения требуется список значений в статическом массиве, поэтому я создаю статическую функцию, которая возвращает группу (например, (a|b|c|d)
) для вставки в регулярное выражение. Проблема в том, что я не могу вызвать статическую функцию, когда объявляю статическое поле.
Мне нужно было бы поместить значение, возвращаемое функцией внутри поля.
Пример:
class A {
public static function Foo()
{
return "Foo";
}
public static $Bar = "lol". self::Foo();
}
echo A::$Bar;
я получил
Parse error: syntax error, unexpected '(', expecting ',' or ';' on line 7
Как я могу решить это?
Вы не можете инициализировать статическое свойство с «динамическими» значениями. Вы можете инициализировать его только литералом или константой.
Вы также можете увидеть это в руководство:
Как и любая другая статическая переменная PHP, статические свойства могут быть инициализированы только с использованием литерала или константы; выражения не допускаются. Поэтому, хотя вы можете инициализировать статическое свойство целым числом или массивом (например), вы не можете инициализировать его другой переменной, возвращаемым значением функции или объектом.
Если вы хотите использовать статическую функцию, просто используйте ее так:
echo A::Foo();
Вместо того, чтобы пытаться сделать что-то так, как не позволяет язык, измените свое мышление и сделайте так, чтобы язык позволил:
class A {
public static function Foo()
{
return "lol" . self::$Bar;
}
public static $Bar = "Foo";
}
echo A::Foo();