2013-05-06 2 views
19
내가 접근 할 필요가 발생했을

/같은 변수를 변경 :

$this->{$var} 

컨텍스트는 CI의 datamapper 얻을 규칙입니다. 이 구문이 실제로 무엇을하는지 찾는 것 같습니다. {이 점에서 무엇을합니까? 왜 안되 :

$this->var 

감사합니다!

답변

36

가변 변수 인 입니다. 따라서 $this->{value-of-$val}이됩니다.

은 참조 : 그래서 예를 들면 http://php.net/manual/en/language.variables.variable.php

:

$this->a = "hello"; 
$this->b = "hi"; 
$this->val = "howdy"; 

$val = "a"; 
echo $this->{$val}; // outputs "hello" 

$val = "b"; 
echo $this->{$val}; // outputs "hi" 

echo $this->val; // outputs "howdy" 

echo $this->{"val"}; // also outputs "howdy" 

근무 예 : 물론

이 클래스의 컨텍스트 내에서 작동하고 http://3v4l.org/QNds9. 이처럼 그냥 간단하게 현지 상황에 변수 변수를 사용할 수 있습니다 :

$a = "hello"; 
$b = "hi"; 

$val = "a"; 
echo $$val; // outputs "hello" 

$val = "b"; 
echo $$val; // outputs "hi" 

근무 예 : $this->{$var}$this->var 모두가 두 개의 매우 다른 것들의 http://3v4l.org/n16sk

+6

hmm'$ object-> attr' ='$ object -> { "attr"}':) –

+0

@DaveChen도이 예제로 내 대답을 업데이트했습니다. – jszobody

+2

시작했을 때 나는' $ this-> $ val' 그리고 비참하게 실패했습니다. 이 답변을보기 좋네. –

8

먼저. 후자는 var 클래스 변수를 요청하고 다른 클래스는 $var 문자열에 포함 된 변수의 이름을 요청합니다. $var'foo' 문자열 인 경우 $this->foo 등을 요청합니다.

동적 프로그래밍 (런타임에만 변수 이름을 알고있는 경우)에 유용합니다.

${'y - x'} = 'Ok'; 
$var = 'y - x'; 
echo ${$var}; 

변수 이름 y - x 때문에 공간과 - 문자의 유효하지 않은 경우에도 Ok 인쇄됩니다 : 당신은 이상한 변수 이름이 특히 때 문자열 맥락에서 고전 {} 표기법은 매우 강력하다.

+1

+1했습니다. 나는 변수 이름이 그렇게 복잡 할 수 있다는 것을 결코 알지 못했다. 그래서 배열/객체를 변수 이름으로 넣을 수 있습니까? –

+1

@DaveChen, 문자열 표현은 yes입니다. 변수 이름에는 길이 제한이 있다고 생각합니다. 나는 이것이 좋은 습관이라고 생각하지 않는다. 그러므로 나는 그것을 피할 것이다. – Shoe

관련 문제