serialize()したSimpleXMLElementオブジェクトをunserialize()しようとしてエラる

$xml = simplexml_load_file( $url );

としたSimpleXMLElementオブジェクトをunserialize()すると、「Node no longer...」とかエラーになる。
マニュアルを見てみると、これはもう戻せない仕様なんですね。

で、対策としてはそのままserializeせずに、stringとかintにキャストして配列に突っ込んでからserializeするといいよって書いてあるので、その通りにしたら上手くいった。

先のATND APIの場合はこんな感じ。

  private function format( $xml )
  {
    $result = array();
    $events = $xml->events;
    foreach( $events->event as $event )
    {
      array_push( $result, array(
        'event_id'   => (int)$event->{'event-id'},
        'title'      => (string)$event->title,
        'place'      => (string)$event->place,
        'address'    => (string)$event->address,
        'event_url'  => (string)$event->{'event-url'},
        'url'        => (string)$event->url,
        'started_at' => (string)$event->{'started-at'}
      ) );
    }
    return $result;
  }

ちなみに、オブジェクトのアクセス名に「-(ハイフン」が入っている場合、「$hoge->event-url」だとアクセスできない。
ハイフンはPHP命名規約で許可されていないからダメみたい。
「$hoge->{'event-url'}」とすればアクセスできる。