Существует ли логическое объяснение к этому?
<?php
$$a = 'hello world';
echo $$a; //displays hello world
echo $$aa; //displays hello world
echo $$aaa; //displays hello world
?>
если вы попробуете
$$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 об именовании, это будет ошибкой
.Выполняя
$$a = 'foo';
, вы говорите, что возьмите значение $ a
. Преобразуйте его в строку. Используйте строку как имя переменной, чтобы присвоить ей 'foo'
. Поскольку $ a
не определено и возвращает NULL
, который при приведении к типу String равен ''
, вы назначаете переменную $ {''}
;
echo ${''}; // 'foo'
Как ни странно, вы можете сделать
${''} = 'foo'; /* but not */ $ = 'foo';
И вы можете сделать
${''} = function() { return func_get_arg(0); };
echo ${''}('Hello World');
// or
echo $$x('Hello World');
, что вызовет уведомление о том, что $ x
не определено, но затем выведет Hello World
. Как ни странно, следующее не работает:
${''} = function() { return func_get_arg(0); };
echo $x('Hello World');
Потому что это вызывает Неустранимая ошибка: имя функции должно быть строкой . Причудливый: D
Поскольку в руководстве по PHP сказано
, имена переменных подчиняются тем же правилам, что и другие метки в PHP. Допустимое имя переменной начинается с буквы или символа подчеркивания, за которым следует любое количество букв, цифр или символов подчеркивания.
Я бы действительно рассмотрел возможность присвоить пустой именованной переменной ошибку.
Для этого уже зарегистрирована несколько связанная ошибка:
Ну, если $a пустое, то вы устанавливаете пустое имя переменной = 'hello world'... И тогда каждый раз, когда вы обращаетесь к этому пустому имени переменной, вы будете получать то, что там хранится...
Это просто как
$a = '';
$$a = 'Foo Bar';
$b = '';
echo $$b; //Displays Foo Bar
Я ставлю на то, что это определение переменной как что-то вроде ${''}
, или переменная без имени, или что-то в этом роде.
Поскольку ни $a
, ни $aa
, ни $aaa
не определены, все они указывают на одно и то же забавное, пустое имя переменной при использовании в контексте переменной переменной.
Вы неправильно поняли, примите во внимание следующее:
$a = 'hello';
$hello = "hello again";
echo $$a;
Вывод:
hello again
В вашем случае вы не установили значения следующих переменных, поэтому он выводит то же самое.
Объяснение:
Когда вы выполняете $$ a
, это означает:
$ $a;
^ ^
$ used for php vars means a's value that is hello
Таким образом получается:
$hello
Чье значение:
hello again