wiem, że można tworzyć zmienne globalne pod względem siebie przy użyciu operacji konkatenacji:Czy mogę użyć konkatenacji ciągów do zdefiniowania klasy CONST w PHP?
define('FOO', 'foo');
define('BAR', FOO.'bar');
echo BAR;
wypisze „foobar”.
Jednak otrzymuję komunikat o błędzie, próbując zrobić to samo, używając stałych klas.
class foobar {
const foo = 'foo';
const foo2 = self::foo;
const bar = self::foo.'bar';
}
foo2 jest określona bez problemu, ale deklarując const pasek error out
Parse error: syntax error, unexpected '.', expecting ',' or ';'
Ja również próbowałem przy użyciu funkcji takich jak sprintf(), ale nie lubi paren lewo dłużej niż ciąg konkatenator ".".
Czy istnieje sposób na stworzenie stałych klas w stosunku do siebie nawzajem w czymś więcej, niż w przypadku trywialnego zestawu znaków, takiego jak foo2?
Nie rozumiem uzasadnienie różne zachowania ustawiającego między stałymi globalnymi a stałymi klasowymi. Myślę, że niedługo odwiedzę stronę bugs.php.net :) Ale na krótką metę pewnie po prostu wyprowadzę stałe z klasy, a następnie skopiuję je do klasy. Więc kludgy! – selfsimilar
bug.php.net zasadniczo powiedział mi, że nie naprawią tego. "Jest to ograniczenie w implementacji, ponieważ dla stałej klasy potrzebujemy stałej wartości w czasie kompilacji i nie możemy oceniać wyrażeń define() jest funkcją regularną, ocenianą w czasie wykonywania i dlatego może zawierać dowolną wartość dowolnej postaci Zmiana ta oznaczałaby dodanie fazy kompilacji ... " Co właściwie jest BS, jak działa poniższy kod: define ('BAR', ThisWorks :: foo. 'Bar'); klasa ThisWorks { const foo = 'foo'; const bar = BAR; } echo ThisWorks :: bar; spowoduje wyświetlenie "foobar" bez błędu. – selfsimilar
Dla każdego, kto tego szuka, błąd jest [# 42355] (https://bugs.php.net/bug.php?id=42355). –