public static function set($storage, $setting, $value)
    {
        if (!is_array($storage) || empty($setting)) {
            throw new ArrayStorageException('Invalid parameters specified');
        }
        $setting = self::parseSetting($setting);
        if (is_array($setting)) {
            $reference = &$storage;
            foreach ($setting as $item) {
                if (!is_array($reference)) {
                    $reference = [];
                }
                $reference = &$reference[$item];
            }
            $reference = $value;
            unset($reference);
            return $storage;
        }
        $storage[$setting] = $value;
        return $storage;
    }