PHP: ПОЛУЧАТЬ-ДАННЫЕ, автоматически будучи объявленным как переменные

Я перенес некоторые перечисления Java в javascript-объекты.

Эти объекты вернули мне правильные массивы. если объектные ключи являются смешанными типами (строка, int, char), возникает проблема.

var Helper = {
    isEmpty: function (obj) {
        return !obj || obj === null || obj === undefined || Array.isArray(obj) && obj.length === 0;
    },

    isObject: function (obj) {
        return (typeof obj === 'object');
    },

    sortObjectKeys: function (object) {
        return Object.keys(object)
            .sort(function (a, b) {
                c = a - b;
                return c
            });
    },
    containsItem: function (arr, item) {
        if (arr && Array.isArray(arr)) {
            return arr.indexOf(item) > -1;
        } else {
            return arr === item;
        }
    },

    pushArray: function (arr1, arr2) {
        if (arr1 && arr2 && Array.isArray(arr1)) {
            arr1.push.apply(arr1, Array.isArray(arr2) ? arr2 : [arr2]);
        }
    }
};

function TypeHelper() {
    var _types = arguments[0],
        _defTypeIndex = 0,
        _currentType,
        _value;

    if (arguments.length == 2) {
        _defTypeIndex = arguments[1];
    }

    Object.defineProperties(this, {
        Key: {
            get: function () {
                return _currentType;
            },
            set: function (val) {
                _currentType.setType(val, true);
            },
            enumerable: true
        },
        Value: {
            get: function () {
                return _types[_currentType];
            },
            set: function (val) {
                _value.setType(val, false);
            },
            enumerable: true
        }
    });

    this.getAsList = function (keys) {
        var list = [];
        Helper.sortObjectKeys(_types).forEach(function (key, idx, array) {
            if (key && _types[key]) {

                if (!Helper.isEmpty(keys) && Helper.containsItem(keys, key) || Helper.isEmpty(keys)) {
                    var json = {};
                    json.Key = key;
                    json.Value = _types[key];
                    Helper.pushArray(list, json);
                }
            }
        });
        return list;
    };

    this.setType = function (value, isKey) {
        if (!Helper.isEmpty(value)) {
            Object.keys(_types).forEach(function (key, idx, array) {
                if (Helper.isObject(value)) {
                    if (value && value.Key == key) {
                        _currentType = key;
                    }
                } else if (isKey) {
                    if (value && value.toString() == key.toString()) {
                        _currentType = key;
                    }
                } else if (value && value.toString() == _types[key]) {
                    _currentType = key;
                }
            });
        } else {
            this.setDefaultType();
        }
        return isKey ? _types[_currentType] : _currentType;
    };

    this.setTypeByIndex = function (index) {
        var keys = Helper.sortObjectKeys(_types);
        for (var i = 0; i < keys.length; i++) {
            if (index === i) {
                _currentType = keys[index];
                break;
            }
        }
    };

    this.setDefaultType = function () {
        this.setTypeByIndex(_defTypeIndex);
    };

    this.setDefaultType();
}


var TypeA = {
    "-1": "Any",
    "2": "2L",
    "100": "100L",
    "200": "200L",
    "1000": "1000L"
};

var TypeB = {
    "U": "Any",
    "W": "1L",
    "V": "2L",
    "A": "100L",
    "Z": "200L",
    "K": "1000L"
};
console.log('keys of TypeA', Helper.sortObjectKeys(TypeA));//keys of TypeA ["-1", "2", "100", "200", "1000"]

console.log('keys of TypeB', Helper.sortObjectKeys(TypeB));//keys of TypeB ["U", "W", "V", "A", "Z", "K"]

var objectTypeA = new TypeHelper(TypeA),
    objectTypeB = new TypeHelper(TypeB);

console.log('list of objectA = ', objectTypeA.getAsList());
console.log('list of objectB = ', objectTypeB.getAsList());

Types:

var TypeA = {
    "-1": "Any",
    "2": "2L",
    "100": "100L",
    "200": "200L",
    "1000": "1000L"
};

var TypeB = {
    "U": "Any",
    "W": "1L",
    "V": "2L",
    "A": "100L",
    "Z": "200L",
    "K": "1000L"
};


Sorted Keys(output):

Key list of TypeA -> ["-1", "2", "100", "200", "1000"]

Key list of TypeB -> ["U", "W", "V", "A", "Z", "K"]
9
задан Eikern 19 September 2008 в 13:34
поделиться

6 ответов

Проверьте свой php.ini на register_globals установка. Это, вероятно, включено, Вы хотите это прочь.

Почему я хотел бы, чтобы переменная была объявлена для меня?

Вы не делаете. Это - ужасная угроза безопасности. Это делает Среду, ДОБЕРИТЕСЬ, POST, Cookie и глобальные Серверные переменные (руководство PHP). Это горстка зарезервированных переменных в PHP.

27
ответ дан 4 December 2019 в 06:31
поделиться

Похож register_globals в Вашем php.ini преступник. Необходимо выключить это. Это - также огромная угроза безопасности, чтобы иметь его на.

Если Вы находитесь на общем хостинге и не можете изменить php.ini, можно использовать ini_set () для выключения register_globals.

4
ответ дан 4 December 2019 в 06:31
поделиться

Набор register_globals к прочь, если я понимаю Ваш вопрос. См. http://us2.php.net/manual/en/language.variables.predefined.php

2
ответ дан 4 December 2019 в 06:31
поделиться

если у Вас нет доступа к php.ini, a ini_set('register_globals', false) в сценарии PHP не будет работать (переменные уже объявляются), .htaccess с:

php_flag register_globals Off

может иногда помогать.

2
ответ дан 4 December 2019 в 06:31
поделиться

Можно протестировать, объявляются ли все переменные правильно путем превращения уровня журнала PHP в PHP.INI к

error_reporting  =  E_ALL 

Ваш фрагмент кода теперь должен генерировать УВЕДОМЛЕНИЕ.

1
ответ дан 4 December 2019 в 06:31
поделиться

В какой-то момент в истории php они приняли спорное решение выключить register_globals по умолчанию, поскольку это была огромная опасность безопасности. Это дает любому потенциал, чтобы ввести переменные в Вашем коде, создать невероятные последствия! Эта "функция" даже удалена в php6

Если Вы замечаете, что это находится на контакте Ваш администратор для выключения его.

1
ответ дан 4 December 2019 в 06:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: