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

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

Я имел:

$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

Решение

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

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

Давайте предположим, что $ _SERVER [‘REQUEST_METHOD’] равен «POST», что и будет для запроса HTTP POST.

Поэтому $ request == «_POST»

$request = $$request;

то есть $request = $_POST;

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

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

По вопросам рекламы [email protected]