2015-02-16 3 views
0

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

Я имел:

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

Но я получаю:

Undefined переменной: _POST

Отпечатано в мой журнал ошибок PHP.

Я был просто любопытно, будет ли испорчен моя идея conceptially, как и почему логика не работает, когда следующий делает:

$_a = 'b'; 
$b = '_a'; 
$c = $$b; 

Edit:

Следующая делает работу :

$request = $_SERVER['REQUEST_METHOD'] === 'POST' ? $_POST : $_GET; 

Дубликат: Superglobals can't be accessed via variable variables in a function?

Чтобы исправить я сделал:

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

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

+0

Почему вы используете код ниндзя? – VeeeneX

+1

Возможный дубликат [Суперглавы не могут быть доступны через переменные переменные в функции?] (Http: //stackoverflow.com/q/8071118/1503018) – sectus

+0

@VeeeneX Я использовал этот код для поддержки нескольких методов запроса. Вначале GET и POST я не знаю, что это будет работать для PATCH/PUT/DELETE и т. д. Примечание. мой последний ответ, который, вероятно, лучший способ сделать это – csga5000

ответ

0

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

запрос $ = $ GLOBALS [ '_'. $ _SERVER [ 'REQUEST_METHOD']];

Почему?

Потому что $ _POST и $ _GET являются глобальными переменными и нуждаются в доступе как таковые. Внутри функций/классов вы обычно делаете что-то вроде:

global $_POST; 

перед использованием.

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

Лучший способ в этом случае?

Мое намерение состояло в поддержке нескольких методов запроса. Я не вещь, что это будет работать для PUT/PATCH/УДАЛИТЬ и т.д. Я бы посоветовал вместо этого использовать:

$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.

Поэтому $ запрос == "_POST"

$request = $$request; 

т.е. $request = $_POST;

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

+0

@deltababel Я пытаюсь установить $ request для $ _POST ... – csga5000

+0

@deltababel. Причина, по которой я делал это магически, - это то, что сервер работал для нескольких методов запроса. Пример получения и публикации – csga5000

 Смежные вопросы

  • Нет связанных вопросов^_^