Недогоняю PHP: <?php class a{} $a = new a; $k = 13; $a -> $k = 'Ice'; echo $a -> $k; // Ice // echo $a -> 13; // Syntax error
То же самое PHP: <?php $k = 13; $$k = 'Ice'; echo $$k; echo $13; Ясно, что переменные с цифровыми именами нормально себе перевариваются. Непонятно, почему запретили к ним обращатсья напрямую.
У нормальных людей $13 не переваривается. Еще можно в качестве самообразования прочитать базисные главы по PHP http://www.php.net/manual/en/language.v ... basics.php
MiksIr Я о том, что echo $$k; - работает, echo $13; - нет. Если echo $13; не закомментировано, то конечно ошибка вылеттит еще при валидации синтаксиса. Заккоментируй и проверь.
Еще можно в глобальной области видимости создать переменную вообще без имени PHP: <?php $k = null; // sic! $$k = 'Hello'; // Переменная с именем NULL существует 100% echo "{$GLOBALS['']}<br>{$$k}"; потому что они, по-сути, элементы массива $GLOBALS. А вот внутри класса не поулчится создать свойство без имени. Опять не логично.
PHP: <?php <?php class a{} $a = new a; $k = 13; $a -> $k = 'Ice'; echo $a -> $k; // Ice echo $a -> {13}; // !(Syntax error) == true [vs] Пожалейте парсер
[vs] по мне, так все логично. $a = 'var'; $$a = ... совсем не то, что $var = ... хотя делают одно и тоже и пересекаются. В первом случае правил на имя переменной нет, во втором - есть. Если хотите обращаться к одной перменной "и так и так" - то соблюдайте правила именования переменных. А вообще лишний показатель того, что хитро***ые конструкции следует применять очень редко и лишь в случае вопросов жизни и смерти, а лучше вообще никогда. Это как всякие eval-ы, так и variable variables. Ибо потенциально проблемные места, а самое главное - нифига не читаемые.
Было бы логично, если это было бы документировано. А так - это допускаются имена переменных, которые согласно документации in-valid.
Это мне? {13} это обращение к области в стеке. Фактически там может быть любое бинарное значение поскольку это почти прямой аналог разыменовывания указателя. Но это никак не имя переменной. PHP: <?php $v = "\0"; $$v = 'dcv'; debug_zval_dump(ord($v)); debug_zval_dump($$v);
Simpliest В том, что debug_zval_dump пишет одинаковое, независимо от способа обращения к переменной: PHP: <?php $k = 'var'; $$k = 'Ice'; debug_zval_dump($var); debug_zval_dump($$k); Код (Text): string(3) "Ice" refcount(2) string(3) "Ice" refcount(2) ... или к чему был приведеный тобой код?
Жесть. И? Вопрос в чем? Тебя смущает debug_zval_dump? Напиши вместо него var_dump, print_r... Код был к тому, что имя переменной обязано соответствовать соглашению о синтаксисе. Содержимое "указателя"(на самом деле это не указатель, но не суть важно) не обязано следовать синтаксису. Ничего нелогичного тут нет. То что у тебя сервер и локальная машина совпали во времени и пространстве - не значит что так будет всегда. Такая аналогия доступна для понимания? Ты сейчас как раз в роли того неофита, который не понимает разницы между этими простыми истинами и спрашивает "а как мне узнать путь к загружаемому файлу"