Действительно ли это - php переменная ошибка в описании переменных?

Существует ли логическое объяснение к этому?

<?php  
$$a = 'hello world';  
echo $$a; //displays hello world  
echo $$aa; //displays hello world  
echo $$aaa; //displays hello world  
?>
14
задан John Kugelman supports Monica 23 July 2010 в 13:09
поделиться

5 ответов

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

$$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 об именовании, это будет ошибкой

.
8
ответ дан 1 December 2019 в 12:12
поделиться

Выполняя

$$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. Допустимое имя переменной начинается с буквы или символа подчеркивания, за которым следует любое количество букв, цифр или символов подчеркивания.

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

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

12
ответ дан 1 December 2019 в 12:12
поделиться

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

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

$a = '';
$$a = 'Foo Bar';
$b = '';
echo $$b; //Displays Foo Bar
1
ответ дан 1 December 2019 в 12:12
поделиться

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

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

2
ответ дан 1 December 2019 в 12:12
поделиться

Вы неправильно поняли, примите во внимание следующее:

$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
1
ответ дан 1 December 2019 в 12:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: