Я работаю над веб-библиотекой для личного пользования. Я думал, что буду умным и использую переменные переменные, чтобы моя библиотека легко поддерживала все методы запросов.
Я имел:
$request = '_' . $_SERVER['REQUEST_METHOD'];
$request = $$request;
Но я получаю:
Неопределенная переменная: _POST
Печатается в моем журнале ошибок php.
Мне было просто любопытно, является ли моя идея концептуальной, а также почему логика не работает, когда следующее:
$_a = 'b';
$b = '_a';
$c = $$b;
Редактировать:
Следующее работает:
$request = $_SERVER['REQUEST_METHOD'] === 'POST' ? $_POST : $_GET;
Дубликат:
Суперглобальные не могут быть доступны через переменные переменные в функции?
Чтобы исправить я сделал:
$request = $GLOBALS['_' . $_SERVER['REQUEST_METHOD']];
Вы также можете использовать мой оригинальный код вне функции или класса.
Полученное вами сообщение об ошибке правильное, такой переменной как $ _POST нет.
$request = '_' . $_SERVER['REQUEST_METHOD'];
Давайте предположим, что $ _SERVER [‘REQUEST_METHOD’] равен «POST», что и будет для запроса HTTP POST.
Поэтому $ request == «_POST»
$request = $$request;
то есть $request = $_POST;
Чего именно ты здесь пытаешься достичь?
Чтобы все заработало, как я сказал в своем посте:
$ request = $ GLOBALS [‘_’. $ _SERVER [ ‘REQUEST_METHOD’]];
Зачем?
Потому что $ _POST и $ _GET являются глобальными переменными и должны быть доступны как таковые. Внутри функций / классов вы обычно делаете что-то вроде:
global $_POST;
Перед использованием.
Вы также можете использовать оригинальный код вне функции или класса.
Лучше в этом случае?
Мое намерение было поддержать несколько методов запроса. Я не думаю, что это будет работать для PUT / PATCH / DELETE и т. Д. Я бы посоветовал вместо этого использовать:
$requestdata = fopen("php://input", "r");
Увидеть: http://php.net/manual/en/features.file-upload.put-method.php
Это может не работать для параметров URL только для тела запроса. Точно сказать не могу. (Если это так, то для получения ЗАПРОСОВ вы бы хотели использовать $ _GET