Я работаю над веб-библиотекой для личного использования. Я думал, что буду умным и использовать переменные переменные, чтобы моя библиотека легко поддерживала все методы запросов.
Я имел:
$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']];
Вы также можете использовать мой исходный код вне функции или класса.
Чтобы он работал, как я сказал в своем посте:
$ 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
Сообщение об ошибке, которое вы получаете, верное, нет такой переменной, как $ _POST.
$request = '_' . $_SERVER['REQUEST_METHOD'];
Предположим, что $ _SERVER ['REQUEST_METHOD'] - это "POST", который будет использоваться для запроса HTTP POST.
Поэтому $ request == "_POST"
$request = $$request;
т.е. $request = $_POST;
Что именно вы пытаетесь достичь здесь?