Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Именование переменных и свойств
Я не думал что вобще возможно использовать число в качестве имени переменной или свойства, про синтаксис с фигурными скобками я знал и раньше. Однако такие имена не соответствуют этому: http://www.php.net/manual/en/lan...ables.basics.php Прошу высказать ваше мнение по этому поводу, а ещё лучше дать ссылку на объяснение каким образом переменные могут иметь подобные имена. Спасибо!
EuGen
Отправлено: 06 Августа, 2013 - 17:12:53
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Не очень понятно, в чём вопрос. Работает ли это? Да, работает. Нужно ли так делать? Нет, не нужно.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
_Dark_
Отправлено: 06 Августа, 2013 - 18:30:29
Частый гость
Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011
Помог: 5 раз(а)
[+]
Ну конвертируется в строку название и в $GLOBALS заносится, а что?
deniel1987
Отправлено: 06 Августа, 2013 - 22:52:00
Новичок
Покинул форум
Сообщений всего: 22
Дата рег-ции: Дек. 2008
Помог: 0 раз(а)
EuGen пишет:
Не очень понятно, в чём вопрос. Работает ли это? Да, работает. Нужно ли так делать? Нет, не нужно.
Попробую объяснить. Итак прежде всего цитата из документации
Цитата:
Variable names follow the same rules as other labels in PHP. A valid variable name starts with a letter or underscore, followed by any number of letters, numbers, or underscores. As a regular expression, it would be expressed thus: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
Из этого следует что в приведённом мной примере работают переменные с именами которые не являются "валидными" тоесть теоритически это не должно работать. И это не работает если делать так:
получается примерно такая ошибка: Parse error: syntax error, unexpected '1'. Это наводит меня на мысль что внутренне переменная в php может иметь имя в виде строки или числа, но когда парсер или транслятор разбирает код он проверяет имена на соответствие чемуто похожему на регулярное выражение указанное выше, а поскольку имя не соответствует то выдаёт ошибку. Таким образом с помощью синтаксиса с фигурными скобками мы обходим проверку парсером переменной на валидность имени. Вопрос заключается в следующем: это нормальное задокументированное поведение или нет. И если это нормально дайте ссылку на какое-нибудь описание этой особенности.
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
А по-моему тема даже очень интересна. Лично я не знал о таком.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
EuGen
Отправлено: 06 Августа, 2013 - 23:56:03
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Хорошо, поясню - правило, указанное в документации, относится только к случаю прямого именования переменных или иных строковых лексем (имён функций и методов, например) путём указания строковых литералов. Так как PHP предоставляет возможности полифорфизма кода (eval и т.п.) времени исполнения, то в общем случае данное правило не следует считать применимым во всех случаях.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
OrmaJever
Отправлено: 06 Августа, 2013 - 23:59:00
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
EuGen вопрос был "задокументирована ли эта возможность и если да то где?"
В офф документации написано что так вообще возможно? Или в php есть синтаксические особенности которые нужно искать самим?
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
DelphinPRO
Отправлено: 07 Августа, 2013 - 00:18:35
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
OrmaJever пишет:
Или в php есть синтаксические особенности которые нужно искать самим?
Истина в том, что не нужно их искать пользуйтесь только задокументированными возможностями, ибо незадокументированные могут перестать работать в след версии. а в текущей, при опеределенных обстоятельствах, работать не так как вы ожидаете.
Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011
Помог: 5 раз(а)
[+]
Какая разница, было задокументировано или нет, не надо так писать и все.
deniel1987
Отправлено: 07 Августа, 2013 - 16:27:15
Новичок
Покинул форум
Сообщений всего: 22
Дата рег-ции: Дек. 2008
Помог: 0 раз(а)
_Dark_ пишет:
Какая разница, было задокументировано или нет, не надо так писать и все.
Разумеется переменные с таким иминем я не использую, я просто столкнулся с тем что имя свойства объекта надо было проверить на валидность, вот и встал вопрос, а что такое валидность с точки зрения php в отношении имён;
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.