PHP 정적 변수는 이중 인용문입니다
문제
PHP가 이중 인용구로 정적 변수를 평가하려면 어떻게해야합니까?
나는 다음과 같은 일을하고 싶다 :
log("self::$CLASS $METHOD entering");
나는 self :: $ class의 변수 값을 얻기 위해 모든 종류의 {} 콤보를 시도했지만 아무것도 작동하지 않았습니다. 나는 현재 문자열 연결로 정착했지만 유형의 고통입니다.
log(self::$CLASS . " $METHOD entering");
해결책
죄송합니다. 그렇게 할 수 없습니다. 간단한 표현에만 적용됩니다. 보다 여기.
다른 팁
불행히도 아직이 작업을 수행하는 방법은 없습니다. 여기서 답변 중 하나의 예는 작동하지 않습니다. {${self::$CLASS}}
내용을 반환하지 않습니다 self::$CLASS
, 그러나 이름으로 변수의 내용을 반환합니다. self::$CLASS
.
다음은 반환되지 않는 예입니다 myvar
, 하지만 aaa
:
$myvar = 'aaa';
self::$CLASS = 'myvar';
echo "{${self::$CLASS}}";
나는 당신의 질문에 대한 답을 모르지만, 당신은 __METHOD__
매직 상수.
변수에 저장된 익명 ID 함수를 사용하십시오. 이런 식으로 당신은 가질 것입니다 $
직후 {
:
$I = function($v) { return $v; };
$interpolated = "Doing {$I(self::FOO)} with {$I(self::BAR)}";
(이 예에서는 클래스 상수를 사용하고 있지만 정적 변수도 작동합니다).
연합과 함께 살아라. 문자열에서의 비효율적 인 가변 보간이 어떻게 될 수 있는지 놀랄 것입니다..
그리고 이것이 사전 최적화 또는 미세 최적화의 우산에 속할 수 있지만, 나는 당신이 실제로이 예에서 우아함을 얻지 못한다고 생각하지 않습니다.
개인적으로, 내가 하나 또는 다른 하나를 작은 최적화하고 내 선택은 "빠른"것 "이고"더 쉽게 입력하기 " -"더 빠른 "선택을 선택할 것입니다. 몇 번만 입력하기 때문에 수천 번 실행할 것입니다.
나는 이것이 오래된 질문이라는 것을 알고 있지만 아무도 아무도 제안한 것이 이상하다고 생각합니다. [sprintf][1]
아직 기능.
말하다:
<?php
class Foo {
public static $a = 'apple';
}
다음과 같이 사용할 것입니다.
echo sprintf( '$a value is %s', Foo::$a );
그래서 당신의 예에서는 다음과 같습니다.
log(
sprintf ( ' %s $METHOD entering', self::$CLASS )
);
예, 할 수 있습니다.
log("{${self::$CLASS}} $METHOD entering");