2010-12-14 2 views
2
public function __construct($template = '', array $data = array()) 
{ 
    if ($template !== '') { 
     $this->setTemplate($template); 
    } 
    if (!empty($data)) { 
     foreach ($data as $name => $value) { 
      $this->$name = $value; 
     } 
    } 
} 

의 사용 (http://www.devshed.com/c/a/PHP/PHP-Composite-View-Design-Pattern-Introducing- the-Key-Concepts/1 /). 어쨌든, 조금 혼란 스럽네요, $this->$name = $value; 성명.PHP 코드 : DevShed의 복합보기 튜토리얼이있어이 키워드

일반적으로 클래스 속성에 대해 그리고/또는 해당 클래스 내에서 클래스의 메서드를 호출 할 때 $this을 사용합니다. 플러스 성명은 두 $이야. 이상한거야! 그렇다면 $this->$name = $value은 foreach 루프에 정의 된 $name을 말하는 것입니까? 그렇다면이 사용법이나 로직에 대해 누군가 설명 할 수 있습니까?

미리 감사드립니다.

답변

2

$this->$name = $value 

의 $ 이름은 $로 정의 된 변수가 $ 값

일예로 이름을 설정합니다 (상기 입증 된 바와 같이) $ 이름 = '사용자',이 foreach는 구문에서 이러한 유형의 자주 사용되는

$this->user = value; 

에 동일한 경우는 오브젝트 값을 설정하는 루프.

참고 : $ this-> variable_name이 호출 될 때마다 'variable_name'이 객체의 속성으로 정의되어 있지 않으면 'variable_name'이 인수로 전달 된 magic __set 함수가 호출됩니다.

http://php.net/manual/en/language.oop5.overloading.php

+0

여기에 맞습니다. 'name'이 (가) 실제 속성으로 존재하지 않는 경우에만 true입니다. 이 경우 마법 속성은 호출되지 않습니다. – KingCrunch

+0

@KingCrunch - 예, 이것이 사실입니다. 내 대답을 편집하여 조금 더 명확하게 만듭니다. – mrwooster

+0

나는 그것을 얻었습니다. AbstractView 클래스를 뒤범벅. $ this-> $ name은 __set에 의해 동적으로 생성 된 $ 이름을 가리키는 것으로 보입니다. 따라서 클래스 속성이 클래스에 명시 적으로 정의되어 있지 않다면 사용자는 기본적으로 다음을 수행 할 수 있습니다. $ foo = new AbstractView; $ foo-> bar = 'stuff'; 따라서 __set 함수가 호출되고 abstractview 클래스의 bar 클래스 속성을 만듭니다. 그리고 $ this-> $ name = $ value 문은 AbstractView 클래스를 통해 정의 된 다른 마법 메서드에 사용되는 placeholder라는 $ name 변수를 참조합니다. 따라서 추가 $를 사용하십시오. 정말 고맙습니다! – mythicalprogrammer

0

$ 이름은 그냥은 호텔의 이름

$name='someproperty'; 

$this->$name; 
0

가정으로하자를 포함하는 변수를 가리키는 정적 속성을 언급하는 대신 그렇지 않으면 name of property 아무것도

을 포함하지 참조 $ name의 현재 값은 "foo"입니다. 그러면 $ this-> name은 $ this-> foo와 정확히 똑같이 반환됩니다.

+0

'$ this -> $ name'을 의미합니다.그리고 * return *이 아니라 오히려 * refer *. –

1

게시 한 링크로 이동하지 않았지만 코드를 읽었습니다.

// If $data has the following values 
array(
    'firstname' => 'my first name', 
    'surname' => 'my surname' 
) 

코드는 클래스의 공용 속성으로 'FIRSTNAME'과 '성'을해야합니다 :

내가 당신에게 예를들 것이다. $this->firstname의 값은 'my first name'입니다. $this->surname의 값은 'my surname'입니다.