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

这是为什么 ?

4

2 回答 2

5

您不访问私有方法_mainCssClass,而是访问getMainCssClass()公共方法。所以你可以从外部调用这个方法,你也可以访问mainCssClass(这只是 的简写getMainCssClass())。

并且getMainCssClass()您可以访问同一类中的任何私有变量。没有限制您不能返回私有变量的值。

于 2013-04-16T16:46:52.883 回答
2

它只是一个更短的语法,更方便读写。

有关“魔术”的一些印象,请参阅Yii 框架指南了解详细信息和源代码

于 2013-04-16T16:47:42.873 回答