@Jaimin: Вы должны посмотреть на ответ @mario, он очень хорошо объяснил, как это работает

$_POST['asdf'] = 'something';

function test() {
    // NULL -- not what initially expected
    $string = '_POST';
    echo '====';
    var_dump(${$string});
    echo '====';

    // Works as expected
    echo '++++++';
    var_dump(${'_POST'});
    echo '++++++';

    // Works as expected
    global ${$string};
    var_dump(${$string});

}

// Works as expected
$string = '_POST';
var_dump(${$string});

test();

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

 RobertPitt30 мая 2011 г., 14:28
как вы думаете, Освальд
 Jaimin30 мая 2011 г., 14:28
как первая внутренняя функция vardump должна работать правильно .. и почему третья внутренняя функция vardump работает нормально
 Oswald30 мая 2011 г., 14:26
Что вы ожидаете? Если фактическое поведение отличается от ваших ожиданий, ваши ожидания ошибочны.

Ответы на вопрос(2)

Решение Вопроса

очны.$_POST а также$_GET никогда не присутствуют в хеш-таблицах локальной переменной. Они существуют как псевдонимы, которые PHP видит только для обычного доступа. Метод доступа к переменной и переменной только когда-либо просматривает текущую локальную хеш-таблицу.

global $string;
  //   $string = & $GLOBALS[$string];

Отличный трюк для создания ссылки на суперглобальные переменные в локальной хеш-таблице. Вот почему после этого оператора вы можете использовать переменные переменные для доступа к «суперглобалам».

Вот

Обратите внимание, что переменные переменные нельзя использовать с массивами PHP Superglobal внутри функций или методов класса. Переменная $ this также является специальной переменной, на которую нельзя ссылаться динамически.

 Jaimin30 мая 2011 г., 15:24
singh: глобальным $ {$ string}; мы используем суперглобальные переменные, а PHP говорит, что «обратите внимание, что переменные переменные нельзя использовать с суперглобальными массивами PHP в функциях или методах класса. Переменная $ this также является специальной переменной, на которую нельзя ссылаться динамически». так как это возможно ..
 Shakti Singh30 мая 2011 г., 14:35
@ Jaimin: Это из-заglobal ${$string}; глобальная декларация. Если вы закомментируете эту строку кода, вы увидите, что третий var_dump также не работает
 Shakti Singh30 мая 2011 г., 15:26
@Jaimin: Вы должны посмотреть на ответ @mario, он очень хорошо объяснил, как это работает
 binaryLV30 мая 2011 г., 14:45
Третийvar_dump() может работать, потому чтоglobal ${$string}} может создать локальную переменную, которая ссылается на глобальную переменную. Я не уверен, что это действительно то, что технически делается при использованииglobal ключевое слово, но это мое предположение.
 Jaimin30 мая 2011 г., 14:30
Можете ли вы объяснить мне третий vardump внутри тестовой функции

Ваш ответ на вопрос