superglobals — PHP: используйте $ _GET для определения

Я пытаюсь определить константу, как в моем коде ниже, чтобы можно было легко переключаться между $ _POST и $ _GET без необходимости менять несколько строк.

Но я получаю следующую ошибку:

Ошибка разбора: синтаксическая ошибка, неожиданное ‘[‘, ожидание ::
(T_PAAMAYIM_NEKUDOTAYIM) в
/var/www/public_docs/admin/web_interface/contract.php в строке 14

define(DEFAULT_DATA_METHOD, $_GET);   // change to $_POST if post should be used

function getData($Name, $Default = "")
/// Encapsulate data retrieval from $_GET or $_POST
{
return (isset(DEFAULT_DATA_METHOD[$Name]) ? DEFAULT_DATA_METHOD[$Name] : $Default); <-- Line 14
}

Возможно ли то, чего я хочу достичь? И как?

-2

Решение

Вы не можете использовать define с массивом. документация очень ясно об этом:

значение
Значение константы; разрешены только скалярные и нулевые значения. Скалярными значениями являются целочисленные, плавающие, строковые или логические значения.

Вы можете использовать обычную ссылочную переменную:

$default_data_method =& $_GET;

Или вы могли бы использовать $_REQUEST, который автоматически сливается $_POST а также $_GET,

2

Другие решения

Зачем вам в любом случае ставить константу $ _GET или $ _POST? $ _GET и $ _POST являются суперглобальными и могут быть доступны из любого места в коде. Назначение его нормальной переменной должно быть достаточным, нет?

0

То, что вы делаете, на самом деле не очень хорошая идея. Константы должны быть постоянными.

Если вы не используете PHP 5.6+, у вас не может быть массива в качестве константы.

http://php.net/manual/en/migration56.new-features.php

Если вы не используете 5.6+.

Вы можете сериализовать ваши данные $ _POST или $ _GET в константу, а затем десериализовать в вашей функции.

define(DEFAULT_DATA_METHOD, serialize($_GET));
0
По вопросам рекламы [email protected]