В руководстве PHP по переменным мы можем прочитать:
Переменные имена соответствуют тем же правилам, что и другие метки в PHP. Правильное имя переменной начинается с буквы или подчеркивания, за которой следует любое количество букв, цифр или символов подчеркивания. В качестве регулярного выражения оно выражается следующим образом: "[a-zA-Z_\x7f-\xff] [a-zA-Z0-9_\x7f-\xff] * '
Так очевидно, когда мы пытаемся запустить:
$0-a = 5;
echo $0-a;
мы получим ошибку Parse. Это совершенно очевидно.
Однако при попытке некоторых вещей я обнаружил, что на самом деле переменные могут содержать любые символы (или, по крайней мере, начинать с цифр и содержать дефисы) при использовании такого синтаксиса:
${'0-a'} = 5;
echo ${'0-a'};
он работает без проблем.
Также используя переменные переменные, такие как:
$variable = '0-a';
$$variable = 5;
echo $$variable;
работает без проблем.
Итак, вопрос в том, что это предложение, которое я цитирую в руководстве, неверно, или, может быть, это то, что я показал, не является реальной переменной или, возможно, документировано где-то еще в руководстве PHP?
Я проверил его - и, похоже, он работает как в PHP 5.6, так и в 7.1
Также возникает вопрос: безопасно ли использовать такие конструкции? Основываясь на руководстве, кажется, что это не должно быть возможным.