form['hoge']とformFieldSchema['hoge']の違い

sfFormとsfFormFieldSchemaはどちらもArrayAccessインターフェイスを実装しており、

  • $form['hoge']
  • $formFieldSchema['hoge']

というように、フォーム要素の識別名でアクセスできます。
これらは両方とも、フォーム要素に対応するsfFormFieldオブジェクトを返します。

ただし、この2つのオブジェクト(処理時点では特定のsfForm派生のオブジェクトがsfFormFieldSchemaオブジェクトを子に持つ)に親子関係はありますが、それぞれが返すsfFormFieldオブジェクトは全く別のインスタンスになってしまっています。
(ArrayAccessのoffsetGetの時点で随時インスタンス化)

基本的には、sfFormFieldオブジェクトは読み取りのみに使用するはずなので見た目上問題にはならないのかもしれませんが、

  • 全く同じ目的のインスタンスが重複して生成される無駄
  • 派生クラスを作成して何らかのプロパティを書き換えできるようにした場合、混乱する

というデメリットがあると思います。
(実際私は2つ目の混乱で発狂しそうでした・・・w)


表示処理で必ず1度はインスタンス化される必要があるものなので、どこか1つにまとめてほしいなと思ったり思わなかったり・・・。
(歴史的経緯や、何か深い理由があるのかもしれませんが・・)