Doctrineアクセサのオーバーライド

開発中、ブラウザが下記エラー表示をしてしばらく悩んだ。。
Proxy Error

apacheのerror.logを見ると

[notice] child pid 8942 exit signal Segmentation fault (11)

上記で調べてもなかなか糸口がつかめず。。。
他のVirtualHostのURLを確認したら正常に表示されている為、どうも自分の環境の問題らしい。

結局、問題はコードにあったようでした。

class Item extends BaseItem
{
  public function getSalePrice()
  {
    // これだとNG
    return number_format(parent::getSalePrice());
    // これもNG
    return number_format($this['sale_price']);

    // こうするとOK
    return number_format($this->_get('sale_price'));
  }
}

NG例はループが発生するようです。

参考HP:
http://blog.asial.co.jp/493

【補足】
ちなみに、getXXX()をオーバーライドすると、$this['column']、$this->get('colomn')も影響を受ける

しかし、以下のようにした場合、$valueは元の値を返す

foreach ($obj as $value) {
  echo $value
}

ただし、配列化するとオーバーライド後の値になる

foreach ($obj->toArray() as $value) {
  echo $value
}

個別に元の値が欲しい場合は以下

$obj->rawGet('カラム');
//$obj->_get('カラム'); は不可(Unknown method)
//model内なら$this->rawGet()でも$this->_get()でも同様