2

还有这两行:

$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;
}
4

1 回答 1

1

在文档的变量变量部分中说:

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

在这段代码中,没有与语法相关的理由来$this->{$spec}代替$this->$spec.

但:

  • 第一种形式对某些团队来说可能更易读(= 由代码约定强制执行)

  • 例如,过去这里可能有一个表达式(如$this->{'_' . $spec})。如果您尝试使用表达式作为“变量属性名称”,则需要使用曲线大括号对其进行分隔。

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

  • 如果$specString类型,则被视为属性的名称;该属性是稍后将被处理(装饰)的;

  • 如果$specZend_Form_SubForm对象,则该对象将被装饰。

于 2012-09-29T14:08:03.623 回答