<?php
// Autogenerated class file

/**
 * Data class data.
 * Class to be used with eZ Components PersistentObject.
 */
class data
{
    /**
     * boiling_temp_k
     *
     * @var float
     */
    private $boiling_temp_k;
    /**
     * melting_temp_k
     *
     * @var float
     */
    private $melting_temp_k;
    /**
     * node_id
     *
     * @var string
     */
    private $node_id;

    /**
     * Set the PersistentObject state.
     *
     * @param array(string=>mixed) $state The state to set.
     * @return void
     */
     public function setState( array $state )
     {
         foreach ( $state as $attribute => $value )
         {
             $this->$attribute = $value;
         }
     }

    /**
     * Get the PersistentObject state.
     *
     * @return array(string=>mixed) The state of the object.
     */
     public function getState()
     {
         return array(
             'boiling_temp_k' => $this->boiling_temp_k,
             'melting_temp_k' => $this->melting_temp_k,
             'node_id' => $this->node_id,
         );
     }
}
?>
