문제

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");
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top