<?php
// Autogenerated class file

/**
 * Data class nested_set.
 * Class to be used with eZ Components PersistentObject.
 */
class nested_set
{
    /**
     * id
     *
     * @var string
     */
    private $id;
    /**
     * lft
     *
     * @var int
     */
    private $lft;
    /**
     * parent_id
     *
     * @var string
     */
    private $parent_id;
    /**
     * rgt
     *
     * @var int
     */
    private $rgt;

    /**
     * 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(
             'id' => $this->id,
             'lft' => $this->lft,
             'parent_id' => $this->parent_id,
             'rgt' => $this->rgt,
         );
     }
}
?>
