Когда вы делаете
$$a = 'foo';
, вы говорите, взять значение $a
.Преобразуйте это в строку.Используйте String как имя переменной, чтобы присвоить ей '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.Допустимое имя переменной начинается с буквы или подчеркивания, за которым следует любое количество букв, цифр или подчеркиваний.
Я бы посчитал, что возможность присвоить пустую именованную переменную действительно ошибка.
Для этого уже есть несколько связанных ошибок: