private function parseParameter(ReflectionParameter $reflectionParameter, &$data, $labels)
    {
        // get the principal properties
        $name = $reflectionParameter->getName();
        $value = null;
        if ($reflectionParameter->isOptional()) {
            $value = $reflectionParameter->getDefaultValue();
        }

        // parse data using labels
        if ($labels) {
            if (isset($data[$name])) {
                $value = off($data, $name, $value);
                unset($data[$name]);
            }
            return $value;
        }

        // parse data without labels
        if (isset($data[0])) {
            $value = $data[0];
            array_shift($data);
            reset($data);
        }
        return $value;
    }