Php Yii getTypeText()

Php Yii getTypeText(),php,function,yii,Php,Function,Yii,我是Yii领域的新手,在阅读Jeffrey Winesett关于Yii-“使用Yii和PHP开发Web应用程序的书时,我尽我所能地学习框架 我发现: 两项具体的公共职能: public function getTypeOptions(){ return array(self::TYPE_BUG=>'Bug',self::FEATURE=>'Feature',self::TASK=>'Task'); } 以及: 现在我了解到getTypeOptions返

我是Yii领域的新手,在阅读Jeffrey Winesett关于Yii-“使用Yii和PHP开发Web应用程序的书时,我尽我所能地学习框架

我发现:

两项具体的公共职能:

public function getTypeOptions(){
        return array(self::TYPE_BUG=>'Bug',self::FEATURE=>'Feature',self::TASK=>'Task');
    }
以及:

现在我了解到getTypeOptions返回了_form.php文件中TypeOptions下拉列表的数组,但是在另一个函数getTypeText()中的变量: $typeOptions,我们直接调用如下函数:

$typeOptions = $this->typeOptions;
不指定函数的完整函数名 “getTypeOptions

不应该是:

$typeOptions = $this->getTypeOptions();
getTypeOptions()的“get”是如何实现的 是Yii特定的还是我不知道的PHP


如果这是一个非常基本的问题,我很抱歉。如果读过这本书的人回答我,我将不胜感激。

这是PHP功能

是的,只要模型中有
getAttributeName
方法,就可以使用
$this->attributeName
返回方法的值,就像它是一个属性一样。它被称为“虚拟属性”。这里有一个关于它的wiki页面:

您将在Yii文档和教程中看到这一点。例如,
Yii::app()->getClientScript()
方法通常只是使用
Yii::app()->clientScript

当您使用CGridView时,它也非常方便,因为您可以在模型中定义一个类似
getAttribute()
的方法,然后添加一个名为
'attribute'
的CGridView列来访问它

之所以可以这样做,是因为CActiveRecord类中有一个PHP getter magic方法。如果您感兴趣,我将在下面粘贴该方法:

/**
     * PHP getter magic method.
     * This method is overridden so that AR attributes can be accessed like properties.
     * @param string $name property name
     * @return mixed property value
     * @see getAttribute
     */
    public function __get($name)
    {
        if(isset($this->_attributes[$name]))
            return $this->_attributes[$name];
        elseif(isset($this->getMetaData()->columns[$name]))
            return null;
        elseif(isset($this->_related[$name]))
            return $this->_related[$name];
        elseif(isset($this->getMetaData()->relations[$name]))
            return $this->getRelated($name);
        else
            return parent::__get($name);
    }

这被称为getter-magic方法,当无法找到或访问属性时会调用它。您也可以在Yii之外使用相同类型的方法:

是的,这是Yii特有的。特别是,基类重写
\uuu get
\uu set
以允许此语法:

属性由getter方法和/或setter方法定义。 可以像访问普通对象一样访问属性 成员。读取或写入属性将导致调用 相应的getter或setter方法,例如

$a=$component->text; // equivalent to $a=$component->getText();
$component->text='abc';  // equivalent to $component->setText('abc');
getter和 setter方法如下所示:

// getter, defines a readable property 'text'
public function getText() { ... }
// setter, defines a writable property 'text'
public function setText($value) { ... }

您可以在线浏览实际实现。

$this->typeOptions是指公共变量$typeOptions。如果查看文件顶部,您会看到行“public$typeOptions”。它不是指getTypeOptions()函数。不,我的代码中没有public$typeOptions。唯一的typeOption变量就是我上面描述的变量。非常感谢您的精彩见解!!:)我真的从中学到了很多!!
// getter, defines a readable property 'text'
public function getText() { ... }
// setter, defines a writable property 'text'
public function setText($value) { ... }