2013-04-16 33 views
1

我不知道這裏發生了什麼,也許有人有線索:

在我的佈局,我有這樣的:

<div id="main-content" class="<?= $this->getMainClass(); ?>"> 

上的部件>控制器類我有這樣的:

private $_mainCssClass; 

    public function setMainCssClass($className) { 

    if (is_string($className)) { 
     $this->_mainCssClass = $className; 
    } else { 
     quickDump($className); 
    } 
    } 

    public function getMainCssClass() { 
    return $this->_mainClass; 
    } 

我沒有得到的是,儘管我們正在使用訪問器,而mainCssClass屬性有一個下劃線,它被聲明爲私有,我可以通過它訪問它:

$this->MainCssClass; 

的一樣:$this->getMainCssClass()

這是爲什麼?

回答

5

您不訪問私人_mainCssClass而是getMainCssClass()這是一種公共方法。所以你可以從外面調用這個方法,你也可以訪問mainCssClass(這只是getMainCssClass()的簡寫)。

而從getMainCssClass()您可以訪問同一類中的任何私有變量。沒有限制,您無法返回私有變量的值。

2

它只是一個較短的語法,讀取和寫入更方便。

查看Yii Framework Guide瞭解詳情,source code瞭解關於「魔法」的一些印象。

+1

非常感謝該源代碼參考。很有趣。我選擇將Michael Hartl作爲答案來聲明,因爲它實際上讓我明白我們不訪問私有屬性,但getMainCssClass(我實際測試過並且看到的是這種情況)。再次,謝謝。 – MEM

相關問題