은 당신이 서로를 사용하여 문자열 연결의 측면에서 전역 상수를 만들 수 있다는 사실을 알고 :나는 PHP에서 클래스 CONST를 정의하는 문자열 연결을 사용할 수 있습니까?
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는 문제없이 정의되어 있지만, 선언 const를 줄이 나는 또한 sprintf와 같은 기능을 사용하려고했습니다
Parse error: syntax error, unexpected '.', expecting ',' or ';'
을 오류가 발생하지()하지만 더 이상 왼쪽의 괄호를 좋아하지 않는다 캐릭터 라인 연결자 '.'
그래서에서는 foo2 같은 사소한 설정의 경우보다 더 많은 것을 서로의 관점에서 클래스 상수를 만들 수있는 방법은 무엇입니까?
: 자세한 정보를 살펴
들어 전역 상수와 클래스 상수 간의 다른 setter 동작. 나는 곧 bugs.php.net을 방문 할 것이라고 생각한다. :) 그러나 단기적으로 나는 상수를 클래스에서 옮긴 다음 클래스로 복사 할 것이다. 그래서 kludgy! – selfsimilar
bug.php.net은 기본적으로 수정하지 않을 것이라고 말했습니다. "이것은 구현의 한계입니다. 클래스 상수의 경우 컴파일 타임에 상수 값이 필요하고 표현식을 평가할 수 없습니다 .define()은 런타임에 평가되는 정규 함수이므로 모든 형식의 값을 포함 할 수 있습니다 이렇게 변경하면 컴파일러에 실행 단계가 추가됩니다. " 다음 코드가 작동하므로 실제로 BS입니다. define ('BAR', ThisWorks :: foo. 'bar'); 클래스 ThisWorks { const foo = 'foo'; const bar = BAR; } echo ThisWorks :: bar; 그러면 'foobar'가 오류없이 출력됩니다. – selfsimilar
다른 사람이 찾고있는 경우 버그는 [# 42355] (https://bugs.php.net/bug.php?id=42355)입니다. –