Я пытаюсь определить константу, как в моем коде ниже, чтобы можно было легко переключаться между $ _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
}
Возможно ли то, чего я хочу достичь? И как?
Вы не можете использовать define
с массивом. документация очень ясно об этом:
значение
Значение константы; разрешены только скалярные и нулевые значения. Скалярными значениями являются целочисленные, плавающие, строковые или логические значения.
Вы можете использовать обычную ссылочную переменную:
$default_data_method =& $_GET;
Или вы могли бы использовать $_REQUEST
, который автоматически сливается $_POST
а также $_GET
,
Зачем вам в любом случае ставить константу $ _GET или $ _POST? $ _GET и $ _POST являются суперглобальными и могут быть доступны из любого места в коде. Назначение его нормальной переменной должно быть достаточным, нет?
То, что вы делаете, на самом деле не очень хорошая идея. Константы должны быть постоянными.
Если вы не используете PHP 5.6+, у вас не может быть массива в качестве константы.
http://php.net/manual/en/migration56.new-features.php
Если вы не используете 5.6+.
Вы можете сериализовать ваши данные $ _POST или $ _GET в константу, а затем десериализовать в вашей функции.
define(DEFAULT_DATA_METHOD, serialize($_GET));