2012-09-29 28 views
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; 
} 
+1

沒有區別 – JvdBerg

+2

你可能會誤以爲'$此 - > $ spec'爲'$這個 - > spec',而它與'$這不太可能 - > {$規範}'。 – air4x

回答

1

它在文檔的Variable Variables部分說:

大括號也可使用,清楚地圈定屬性名稱。 是 包含數組的屬性中訪問值時,當屬性名稱是由多張部分

在這段代碼中沒有語法有關的理由使用$this->{$spec}代替$this->$spec的他們是最有用的。

但:

  • 第一形式可能會更加可讀一些團隊(=由代碼慣例執行)

  • 也許在過去,有人這裏的表達式(如$this->{'_' . $spec} ), 例如。如果您嘗試使用表達式作爲「變量屬性名稱」,則需要使用曲線大括號進行分隔。

至於$spec$this->$spec之間的區別,它更清楚。這種方法可以使用兩種類型的單一參數的工作:

  • 如果$specString型的,它被視爲財產的名稱;這個屬性是什麼將被處理(裝飾)後來;

  • if $spec is Zend_Form_SubForm object,this object will be decorated instead。

相關問題