Possible Duplicate:
Workaround for basic syntax not being parsedŁączenie bit flagi w klasie stałej PHP
Próbuję pozwolić deweloperom określić dowolną kombinację bitów określić, które elementy danych Chcą zawartych w odpowiedzi.
class ClassName {
const BUILD_DATE_RFC = 1;
const BUILD_DATE_SQL = 2;
const BUILD_DATE_SQLTIME = 4;
const BUILD_DATE_UNIX = 8;
// ....
}
Działa to w tym sensie, że kiedy instancję klasy tak:
$whatever = new ClassName(BUILD_DATE_RFC|BUILD_DATE_SQL);
Ta logika byłaby wykonane:
if (self::BUILD_DATE_RFC & $this->metaBits) {
$dateMeta['RFC'] = date('r');
}
if (self::BUILD_DATE_SQL & $this->metaBits) {
$dateMeta['SQL'] = date('Y-m-d');
}
if (self::BUILD_DATE_SQLTIME & $this->metaBits) {
$dateMeta['SQL_time'] = date('Y-m-d H:i:s');
}
Wszystko to działa pięknie, z wyjątkiem I Chciałbyś zdefiniować "bity skrótów" podobne do BUILD_DATE_ALL, które byłyby wartością sumy wszystkich bitów związanych z DATE, więc muszą tylko określić tę stałą skrótu, a nie każdą indywidualnie.
próbowałem tego, ale zgłasza błąd:
const BUILD_DATE_ALL = (self::BUILD_DATE_RFC|self::BUILD_DATE_SQL|self::BUILD_DATE_SQLTIME|self::BUILD_DATE_UNIX);
Próbowałem również różne podejścia/składni:
const BUILD_REQUEST_ALL = self::BUILD_IP |
self::BUILD_USERAGENT |
self::BUILD_REFERER;
i innego podejścia próbowałem:
const BUILD_DEFAULT = self::BUILD_DATE_ALL|self::BUILD_REQUEST_ALL^self::BUILD_REFERER^self::BUILD_USERAGENT;
błędu Otrzymuję:
ErrorException: syntax error, unexpected '('
i błąd pojawia się w przypadku innych metod to:
ErrorException: syntax error, unexpected '|', expecting ',' or ';'
Wygląda jak PHP nie chce obliczyć zbyt dużo w stałej definicji i chce tylko pojedynczą wartość zamiast wartości pochodnej. Zakładam, że jest to oparte na tym, że nie chce nawiasów ani nie chce | wykonać dalsze obliczenia. Dodatkowo próbowałem użyć '-' zamiast | żeby przetestować moją teorię ... i tak, narzekało też na to, że + jest nieoczekiwane.
Jak mam rozwiązać problem, aby zdefiniować "bit skrótu", który jest sumą zakresu innych już zdefiniowanych stałych.
Musisz zdefiniować tę stałą ze zwykłą wartością numeryczną (od samodzielnego dodawania flag). – mario
Z [docs] (http://php.net/manual/en/language.oop5.constants.php) dodano obsługę stałego wyrażenia w PHP 5.6.0. Zatem Twoje pierwsze podejście nie spowodowałoby błędu. 'const BUILD_DATE_ALL = (self :: BUILD_DATE_RFC | self :: BUILD_DATE_SQL | self :: BUILD_DATE_SQLTIME | self :: BUILD_DATE_UNIX);' – GreeKatrina