2010-06-09 2 views
2

나는이 문구를 어떻게 쓰는지 잘 모르므로이 대답을 찾는 데 어려움을 겪고 있습니다. 나는 PHP를 처음 사용하고 여전히 내 발걸음을 터뜨리고있다. 저는 속성 이름을 가진 클래스가있는 페이지를 작성했습니다. 원래 페이지를 썼을 때 클래스가 없어서 $name이라는 변수 만있었습니다. 내가 그것을 클래스로 캡슐화하려고 갔을 때 우연히 $myClass->$name으로 변경되었습니다. 필요한 문법이 $myClass->name이라는 것을 깨닫는 데 시간이 걸립니다. 너무 오래 걸린 이유는 계속해서 "null 속성에 액세스하려고 시도했습니다"라는 오류가 발생했기 때문입니다. 오류로 인해 데이터 채우기 오류라고 생각하게되었습니다.

내 질문은 $myClass->$name이 유효한 의미입니까? 다시 말해, 이것을 사용할 시간과 구문 오류를 생성하지 않는 이유가 무엇입니까? 그렇다면 그 코드의 의미 적 의미는 무엇입니까? 그것이 유효한 경우 언제 사용합니까? 유효하지 않은 경우 구문 오류가 발생하지 않는 이유는 무엇입니까?

답변

3

예.

$name = "bar"; 
echo $myClass->$name; //the same as $myClass->bar 

나는이 오류 메시지가별로 도움이되지 않는다는 데 동의합니다.

+0

그래서 $ myClass에 $ bar 인 속성을 사용하면 구문에 액세스 할 수 있습니까? 나는 이것에 대해 분명히하고 싶다. 그것은 의미가 있습니다. –

+0

예. class Foo {public $ bar; } $ foo = new Foo(); $ foo-> bar = 3.1415926; $ name = "bar"; echo $ foo -> $ name; // Output : 3.1415926 – dbemerlin

+1

@ImperialLion "$ bar"라는 속성을 가질 수도 있지만, 이상하게 들릴 수도 있지만 가능하면'$ name = "\ $ bar"; $ obj -> $ name = "foo"'. – Artefacto

0

$myClass->$name은 "가변 속성 이름"입니다. 이름이 변수 $name에있는 속성에 문자열로 액세스합니다. 당신이지고 있었다 이유는 "널 재산"오류는 $name라는 변수를 가지고 있지 않은 것이 었습니다 (또는 그것은 null했다)

2

variable variables 약 읽기 :

클래스 속성도 변수 속성을 사용하여 액세스 할 수 있습니다 이름. 가변 속성 이름은 호출이 이루어진 범위 내에서 확인됩니다. 예를 들어, $ foo->$bar과 같은 표현식이있는 경우 로컬 범위는 $bar에 대해 검사되며 그 값은$foo 속성의 이름으로 사용됩니다. $bar이 배열 액세스 인 경우에도 마찬가지입니다.