2009-10-26 3 views
0

Here is a link to the tutorial that I am referring to.PHP, Zend Framework 빠른 시작 튜토리얼 : 어떻게 작동하나요?

이것은 이상하게 보입니다 ... 뷰 스크립트에서 우리는이 코드를 가지고 있습니다 :

<?php echo $this->escape($entry->email) ?> 

이것은 방명록 모델에 설정된 이메일 주소를 표시합니다. 그러나 모델의 속성은 $_email이며 보호됩니다. 우리는 $entry->getEmail();를 호출하지 않기 때문에 이것이 어떻게 작동하는지 또는이 정보를 어디에서 가져 오는지 이해하지 못합니다. 나는 그것이 작동한다는 것을 알고 있지만, 나는 단지 어떻게 이해하지 못합니다.

답변

2

$email이라는 속성이없고 클래스에 __get 마법 방법이있는 경우 해당 마법을 통과하게됩니다. 우리가 개별 항목의 속성 및 다른 게터에 프록시와 세터에 접근 할 수

__get()__set()가 편의 메커니즘을 제공 할 것입니다 : 당신이 링크 된 페이지를 인용 실제로

. 또한 허용 된 유일한 속성 인 을 확인하는 데 도움이되므로 개체에서 사용할 수 있습니다.

PHP 5의 마술 방법에 대해 자세히 알아 보려면 this page of the manual을 읽어보십시오. Zend Framework에서는 마술 방법이 상당히 많이 사용됩니다. 그리고 다른 현대적인 틀에서도 제가 추가해야합니다.

+0

감사합니다. 전에는 마법 방법에 대해 몰랐습니다. – Andrew

+0

당신은 환영합니다 :-) 이것들은 꽤 유용 할 수 있습니다 ;-) –

0

일반적으로 액세스 할 수없는 속성에 액세스 할 수있게 해주는 $ entry 객체 내에 아마도 __get() 메서드가있을 수 있습니다.

1

클래스에서 정의되지 않은 속성에 액세스 할 때이 메서드가 호출됩니다.

public function __get($name) 
{ 
    $method = 'get' . $name; 
    if (('mapper' == $name) || !method_exists($this, $method)) { 
     throw new Exception('Invalid guestbook property'); 
    } 
    return $this->$method(); 
} 

이 방법은 다시 다른 방법으로 리디렉션됩니다. 이 경우 getEmail().

관련 문제