newExpData( $serialization['subject'] ); } if ( !$expData instanceof ExpData ) { throw new OutOfBoundsException( 'ExpData could not be created probably due to an invalid subject' ); } $this->doDeserialize( $serialization, $expData ); return $expData; } private function newExpData( $subject ) { return new ExpData( ExpElement::newFromSerialization( $subject ) ); } private function doDeserialize( $serialization, $expData ) { foreach ( $serialization['data'] as $data ) { $property = ExpElement::newFromSerialization( $data['property'] ); foreach ( $data['children'] as $child ) { $expData->addPropertyObjectValue( $property, $this->doDeserializeChild( $child ) ); } } } private function doDeserializeChild( $serialization ) { if ( !isset( $serialization['subject'] ) ) { return ExpElement::newFromSerialization( $serialization ); } $element = $this->newExpData( $serialization['subject'] ); $this->doDeserialize( $serialization, $element ); return $element; } }