public static function variableName($value, $occurence = 0)
    {
        if (is_int($occurence) === false || $occurence < 0) {
            $msg = "The 'occurence' argument must be a positive integer (>= 0).";
            throw new InvalidArgumentException($msg);
        }

        if (is_object($value) === true) {
            $object = new ReflectionObject($value);
            $className = mb_strtolower($object->getShortName(), 'UTF-8');

            return "${className}_${occurence}";
        } else {
            // Is it a PHP scalar value?
            if (is_scalar($value) === true) {
                return gettype($value) . '_' . $occurence;
            } elseif (is_array($value) === true) {
                return 'array_' . $occurence;
            }
            // null value?
            elseif (is_null($value) === true) {
                // To avoid conflict with NullValue QTI expression object!!!
                return 'scalarnullvalue_' . $occurence;
            } else {
                $msg = "Cannot handle the given value.";
                throw new InvalidArgumentException($msg);
            }
        }
    }