Это ошибка переменной переменной php?

Есть ли логическое объяснение этому?

<?php  
$$a = 'hello world';  
echo $$a; //displays hello world  
echo $$aa; //displays hello world  
echo $$aaa; //displays hello world  
?>

Ответ 1

если вы попробуете

$$a = 'hello world';
echo $$a; //displays hello world
echo $$aa; //displays hello world
echo $$aaa; //displays hello world


die( "<pre>" . print_r( get_defined_vars(), true ) . "</pre>" );

Вы можете видеть, что он зарегистрировал переменную без имени, поэтому да, в соответствии с соглашениями об именах PHP, это будет ошибка

Ответ 2

При выполнении

$$a = 'foo';

вы говорите, возьмите значение $a. Преобразуйте его в строку. Используйте имя переменной String as, чтобы присвоить ей 'foo'. Поскольку $a - undefined и возвращает NULL, который, когда typecasted для String равен '', назначает переменную ${''};

echo ${''}; // 'foo'

Как ни странно, вы можете сделать

${''} = 'foo'; /* but not */ $ = 'foo';

И вы можете сделать

${''} = function() { return func_get_arg(0); };
echo ${''}('Hello World');
// or
echo $$x('Hello World');

из-за чего уведомление о $x будет undefined, но будет выводиться Hello World. Забавно, следующее не работает:

${''} = function() { return func_get_arg(0); };
echo $x('Hello World');

Потому что он вызывает Fatal error: имя функции должно быть строкой. Причудливый: D

Поскольку в руководстве по PHP говорится

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

Я бы подумал о возможности присвоить пустую именованную переменную ошибку.

Для этого уже есть несколько связанных ошибок:

Ответ 3

Я уверен, что он определяет переменную как нечто действие ${''} или переменную без имени или что-то в этом направлении.

Поскольку ни $a, ни $aa, ни $aaa не определены, все они указывают на то же самое фанковое пустое имя переменной при использовании в контексте переменных переменных.

Ответ 4

Ну, если $a пуст, тогда вы устанавливаете пустое имя переменной для = 'hello world'... Итак, каждый раз, когда вы ссылаетесь на это имя пустой переменной, вы получаете то, что там хранится...

Это просто как

$a = '';
$$a = 'Foo Bar';
$b = '';
echo $$b; //Displays Foo Bar

Ответ 5

Вы не понимаете, правильно ли это:

$a = 'hello';
$hello = "hello again";
echo $$a;

Вывод:

hello again

В вашем случае вы не задали значение следующих переменных, поэтому оно выводит то же самое.

Объяснение:

Когда вы выполняете $$a, это означает:

$                           $a;
^                            ^
$ used for php vars         means a value that is hello

Так оно и будет:

$hello

Чье значение:

hello again