也是这两行:
$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;
}
答案 0 :(得分:1)
在文档的Variable Variables部分说:
也可以使用大括号来清楚地界定属性名称。 在访问属性中的值时,它们最有用 包含一个数组,当属性名称由多个部分组成时
在此代码中,使用$this->{$spec}
代替$this->$spec
没有语法相关的原因。
但是:
第一个表单可能对某些团队更具可读性(=由代码约定强制执行)
或许在过去,这里有一个表达式(例如$this->{'_' . $spec}
)。如果您尝试将表达式用作“变量属性名称”,则需要使用曲线括号来分隔它。
至于$spec
和$this->$spec
之间的区别,它更清楚。此方法可以使用其单个参数的两种类型:
如果$spec
属于String
类型,则将其视为属性名称;这个属性将在以后处理(装饰);
如果$spec
为Zend_Form_SubForm
个对象,则会对此对象进行修饰。