Я знаю, что можно создать глобальные константы друг с точки зрения друга использующего конкатенацию строк:
define('FOO', 'foo');
define('BAR', FOO.'bar');
echo BAR;
распечатает 'foobar'.
Однако я получаю ошибку при попытке сделать те же константы класса использования.
class foobar {
const foo = 'foo';
const foo2 = self::foo;
const bar = self::foo.'bar';
}
foo2 определяется без проблемы, но объявление панели константы будет ошибка
Ошибка анализа: синтаксическая ошибка, неожиданная '. ', ожидая'', или'';
Я также попытался использовать функции как sprintf (), но ему больше не нравится левый paren, чем строка concatenator '.'.
Таким образом, там какой-либо путь состоит в том, чтобы создать константы класса друг с точки зрения друга в чем-то большем чем тривиальном случае набора как foo2?
Единственный способ - определить () выражение и затем использовать эту константу в классе
define('foobar', 'foo' . 'bar');
class Foo
{
const blah = foobar;
}
echo Foo::blah;
Другой вариант - зайти на bugs.php.net и любезно попросите их исправить это.
Для констант класса ничего нельзя присвоить кроме постоянного выражения. Цитата из руководства PHP :
«Значение должно быть константным выражением, а не (например) переменной, свойством, результатом математической операции или вызовом функции».
В подобных случаях всегда обращайтесь к надежному руководству.
Относительно констант :
Значение должно быть константным выражением, а не (например) переменной , свойством, результатом {{ 1}} математическая операция или вызов функции .
Итак ... "нет" будет ответом: D