2009-10-26 83 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()將提供 便利機制,我們才能存取 個別條目的屬性,並 代理其他getter和setter方法 。他們還將幫助確保 只有我們白名單的屬性將 在對象中可用。

要了解關於PHP 5中魔術方法的更多信息,可以閱讀this page of the manual - 魔術方法在Zend Framework中使用很多;在其他現代框架中也應該添加。

+0

謝謝。從來不知道魔術方法。 – Andrew 2009-10-27 01:34:53

+0

不客氣:-)這些可以是非常有用的;-) – 2009-10-27 05:22:47

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()。