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'}」とすればアクセスできる。