Метод запроса переменной PHP

0

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

Я имел:

$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']];

Вы также можете использовать мой исходный код вне функции или класса.

  • 0
    Почему вы используете код ниндзя?
Показать ещё 1 комментарий
Теги:
request
variable-variables

2 ответа

0
Лучший ответ

Чтобы он работал, как я сказал в своем посте:

$ 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

0

Сообщение об ошибке, которое вы получаете, верное, нет такой переменной, как $ _POST.

$request = '_' . $_SERVER['REQUEST_METHOD'];

Предположим, что $ _SERVER ['REQUEST_METHOD'] - это "POST", который будет использоваться для запроса HTTP POST.

Поэтому $ request == "_POST"

$request = $$request;

т.е. $request = $_POST;

Что именно вы пытаетесь достичь здесь?

  • 0
    @deltababel Я пытаюсь установить $ request для $ _POST ...
  • 0
    @deltababel Причина, по которой я делал это волшебным образом, заключалась в том, что сервер работал с несколькими методами запросов. Ex. получить и опубликовать

Ещё вопросы

Сообщество Overcoder
Наверх
Меню