Possible Duplicate:
Workaround for basic syntax not being parsedCombinare flag di bit in una classe costante PHP
sto cercando di consentire agli sviluppatori di specificare qualsiasi combinazione di bit per specificare quali parti dei dati che vogliono inclusi in una risposta.
class ClassName {
const BUILD_DATE_RFC = 1;
const BUILD_DATE_SQL = 2;
const BUILD_DATE_SQLTIME = 4;
const BUILD_DATE_UNIX = 8;
// ....
}
Questo funziona, nel senso che quando un'istanza della classe in questo modo:
$whatever = new ClassName(BUILD_DATE_RFC|BUILD_DATE_SQL);
Questa logica sarebbe stato giustiziato:
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');
}
Tutto questo funziona a meraviglia, tranne I' Mi piacerebbe definire 'bit di scelta rapida' qualcosa come BUILD_DATE_ALL quale sarebbe il valore della somma di tutti i bit relativi alla DATA in modo che debbano solo specificare quella costante di scelta rapida piuttosto che ciascuno individualmente.
Ho provato questo, ma genera un errore:
const BUILD_DATE_ALL = (self::BUILD_DATE_RFC|self::BUILD_DATE_SQL|self::BUILD_DATE_SQLTIME|self::BUILD_DATE_UNIX);
Ho anche provato diversi approcci/sintassi:
const BUILD_REQUEST_ALL = self::BUILD_IP |
self::BUILD_USERAGENT |
self::BUILD_REFERER;
e un altro approccio che ho provato:
const BUILD_DEFAULT = self::BUILD_DATE_ALL|self::BUILD_REQUEST_ALL^self::BUILD_REFERER^self::BUILD_USERAGENT;
L'errore Ottengo:
ErrorException: syntax error, unexpected '('
e l'errore che ottengo per gli altri approcci è:
ErrorException: syntax error, unexpected '|', expecting ',' or ';'
Sembra PHP non vuole calcolare troppo in una definizione costante e vuole solo un singolo valore, piuttosto che valore derivato. Suppongo che questo si basi sul fatto che non vuole parentesi né vuole il | fare ulteriori calcoli. Inoltre, ho provato a usare '-' invece di | solo per testare la mia teoria .. e sì, si lamentava del fatto che il + fosse inaspettato.
Come risolvere il problema in modo da poter definire un "bit di scelta rapida" che è la somma di un intervallo delle altre costanti già definite.
è necessario definire che costante con un valore numerico pianura (di aggiungere le bandiere da soli). – mario
Da [docs] (http://php.net/manual/en/language.oop5.constants.php), il supporto per l'espressione costante è stato aggiunto in PHP 5.6.0. Quindi il tuo prossimo approccio iniziale non genererebbe un errore. 'const BUILD_DATE_ALL = (self :: BUILD_DATE_RFC | self :: BUILD_DATE_SQL | self :: BUILD_DATE_SQLTIME | self :: BUILD_DATE_UNIX);' – GreeKatrina