PHP побитовые перечисления - PullRequest
       1

PHP побитовые перечисления

4 голосов
/ 28 февраля 2012

Я пытаюсь сделать что-то вроде побитового перечисления в PHP согласно этому ответу . Однако, хотя это работало хорошо, когда я определил все константы как обычные целые числа, как это:

final class CountryEnum {
    const CZ = 1;  //Czech Republic
    const DE = 2;  //Germany
    const DK = 4;  //Denmark
    //12 more
    const US = 32768; //USA
}

Это не работает, когда я пытаюсь определить значения с помощью шаблона сдвига битов, т. Е .:

final class CountryEnum {
    const CZ = 1;  //Czech Republic
    const DE = 1 << 1;  //Germany
    const DK = 1 << 2;  //Denmark
    //12 more
    const US = 1 << 15; //USA
}

Когда я пытаюсь запустить это, PHP произносит подходящую поговорку

Ошибка разбора: ошибка разбора, ожидание ','' or ';' 'в CountryEnum.php в строке [строка с const DE]

Так что я, вероятно, упускаю некоторые фундаментальные базовые вещи, но я в растерянности.

Ответы [ 2 ]

7 голосов
/ 28 февраля 2012

версии PHP ранее, чем 5.6

Вы не можете определить константу или свойство класса с помощью выражения в PHP, даже если результат выражения всегда будет возвращать одно и то же значение (например, 1 << 2).Это связано с тем, что константы класса определяются во время компиляции, а не во время выполнения.См. Константы класса Документы :

Значение должно быть константным выражением, а не (например) переменной, свойством, результат математической операции или вызова функции.

PHP 5.6 и более поздних версий

Начиная с версии PHP 5.6, выпущенной в 2014 году, константа скалярных выражений теперь синтаксически допустимы и будут проанализированы.

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

3 голосов
/ 28 февраля 2012

Вы просто не можете назначить выражение для const в PHP (или любое другое свойство в этом отношении) по какой-то странной причине.Вам придется оставить их такими, какими они были раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...