$ this-> {$ spec}和$ this-> $ spec之间有什么区别?

时间:2012-09-29 13:49:07

标签: php

也是这两行:

$subForm = $this->{$spec}
$subForm = $spec;

public function prepareSubForm($spec)

{
    if (is_string($spec)) {
        $subForm = $this->{$spec};
    } elseif ($spec instanceof Zend_Form_SubForm) {
        $subForm = $spec;
    } else {
        throw new Exception('Invalid argument passed to ' .
                __FUNCTION__ . '()');
    }
    $this->setSubFormDecorators($subForm)
    ->addSubmitButton($subForm)
    ->addSubFormActions($subForm);
    return $subForm;
}

1 个答案:

答案 0 :(得分:1)

在文档的Variable Variables部分说:

  

也可以使用大括号来清楚地界定属性名称。   在访问属性中的值时,它们最有用   包含一个数组,当属性名称由多个部分组成时

在此代码中,使用$this->{$spec}代替$this->$spec没有语法相关的原因。

但是:

  • 第一个表单可能对某些团队更具可读性(=由代码约定强制执行)

  • 或许在过去,这里有一个表达式(例如$this->{'_' . $spec})。如果您尝试将表达式用作“变量属性名称”,则需要使用曲线括号来分隔它。

至于$spec$this->$spec之间的区别,它更清楚。此方法可以使用其单个参数的两种类型:

  • 如果$spec属于String类型,则将其视为属性名称;这个属性将在以后处理(装饰);

  • 如果$specZend_Form_SubForm个对象,则会对此对象进行修饰。