Почему переменная не может начинаться с числа?
Я работаю в PHP, я должен определить переменные в последовательности, чтобы сохранить в Mysql. И имя поля, и имя переменной должны быть одинаковыми в моем случае.
Могу ли я объявить переменную, как это
$1 OR $2 etc
Если нет, то почему нет, и если да, то почему да?
Я старался:
$id = 0;
$6 = $_REQUEST['6'];
$7 = $_REQUEST['7'];
$8 = $_REQUEST['8'];
$xary = array('6','7','8','9')
$oAppl->save_record("tablename", $id, "id");
которые дают мне ошибку.
Также я могу создавать и использовать поля в Mysql с тем же именем?
11 ответов
Вот как был разработан PHP. Вы не можете начать имя переменной с числа.
Что вы можете сделать, это использовать подчеркивание:
$_6 = $_REQUEST['6'];
РЕДАКТИРОВАТЬ: так как переменные начинаются с $ в PHP, было бы возможно иметь переменные, начинающиеся с цифр, но это было бы немного смущает большинство людей, так как нет другого языка, который позволяет переменные, начинающиеся с цифр (или, по крайней мере, я не не знаю ни одного).
Но давайте представим, что переменные, начинающиеся с цифр, разрешены.
Можете ли вы представить себе коллегу, который говорит вам: 23 равно 74? Это немного сбивает с толку. Слушание n23 равно 74 имеет больше смысла. Вы знаете, что n23 - это переменная без явного указания этого.
Да, вы можете объявить переменные в PHP, которые начинаются с числа:
${'1'} = 'hello';
Это объявляет переменную с именем переменной "1"
в PHP.
Чтобы получить к нему доступ, вам нужно снова использовать синтаксис скобки:
echo ${'1'};
Это необходимо, потому что в PHP-коде дословно нельзя написать:
echo $1;
Это дало бы синтаксическую ошибку.
Также я могу создавать и использовать поля в Mysql с тем же именем?
Да, вы можете, это работает так же, как в PHP. В Mysql вам также нужно заключить в кавычки только числовой идентификатор, цитата отличается:
mysql> create table test (`0` INT);
mysql> describe test;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| 0 | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
Здесь используются галочки (конфигурация Mysql по умолчанию). Как руководство по PHP, так и руководство по Mysql объясняют подробности этого, также есть много вопросов, связанных с цитированием идентификаторов как для PHP, так и для Mysql на веб-сайте Stackru.
Это не имеет смысла. Но вы все равно можете использовать динамические имена переменных.
<?php
$name = 1;
$ $name = 'name';
// $ 1 = 'name'; // the same, but syntax not allowed
var_dump($ $name); // value of $1
var_dump(${$name});
var_dump($$name);
Чтобы увеличить ответ @hakre, вы также можете потерять цитаты для краткости
${1}
но увы, вы не можете объединить это со строковым значением. Я провел несколько экспериментов, и, очевидно, PHP ожидает либо строковое, либо числовое значение. И вы можете делать все что угодно в фигурных скобках, которые в конечном итоге возвращают число или строковое значение или неявно приводятся к любому из них.
<?php
function eight (){
return 8;
}
${7+'fr'} = ${7*'fr'+1} = ${'hi'.((string)8).'hi'} = ${7.8910} = ${eight()} = ${(eight()==true)+4} = 'hi';
var_dump(get_defined_vars());
Выходы
array(8) { ["_GET"]=> array(0) { }
["_POST"]=> array(0) { }
["_COOKIE"]=> array(0) { }
["_FILES"]=> array(0) { }
["7.891"]=> string(2) "hi"
["7"]=> string(2) "hi"
["1"]=> string(2) "hi"
["hi8hi"]=> string(2) "hi"
["8"]=> string(2) "hi"
["5"]=> string(2) "hi" }
Дополнительно я нашел кое-что интересное:
<?php
${false} = 'hi';
${true} = 'bye';
var_dump(get_defined_vars());
Выходы
array(6) { ["_GET"]=> array(0) { }
["_POST"]=> array(0) { }
["_COOKIE"]=> array(0) { }
[""]=> string(2) "hi"
["1"]=> string(3) "bye" }
Что значит false
оценивает пустую строку, а не 0 и true
до 1.
Хорошо подумайте об этом:
$2d = 42;
$a = 2d;
Что это? 2,0? или 42?
Подсказка, если вы не получили его, d после числа означает число перед двойным литералом
Сложно однозначно определить, представляет ли числовой символ в модуле компиляции литерал или идентификатор.
Языки, где пробел незначителен (например, АЛГОЛ и оригинальный ФОРТРАН, если я правильно помню), не могут принимать числа для начала идентификаторов по этой причине.
Это идет далеко - до специальных обозначений для обозначения хранения или числовой базы.
Для более подробного обсуждения посетите Почему имена переменных не могут начинаться с цифр?
Прежде всего PHP
был разработан как a variable can't start with a number
. Большинство языков следуют одному и тому же правилу именования. Это в основном дляbetter readability
а также compiling performance optimisation
. При лексическом анализе во время компиляции исключается возврат с возвратом.
Предположим, переменная вроде:
test = 12;
123test = 12;
Компилятор будет знать test
является идентификатором сразу после встречи с буквой "т".
И в случае 123test
, компилятор не сможет решить, является ли это числом или идентификатором, пока он не достигнет 't' после 3
, и в результате требуется возврат.
Как сказано в документации php, вы не можете:
основы
Переменные в PHP представлены знаком доллара, за которым следует имя переменной. Имя переменной чувствительно к регистру.
Имена переменных следуют тем же правилам, что и другие метки в PHP. Допустимое имя переменной начинается с буквы или подчеркивания, за которым следует любое количество букв, цифр или подчеркивания.
Как регулярное выражение, оно будет выражаться так:
[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
Что касается MySQL, документация гласит:
Идентификаторы могут начинаться с цифры, но если они не указаны, они могут состоять не только из цифр.
ВСЕ ОТВЕТЫ, КОТОРЫЕ ГОВОРИТ, ЧТО ВЫ МОЖЕТЕ СОЗДАТЬ ПЕРЕМЕННУЮ ЧИСЛО В PHP, НЕПРАВИЛЬНЫ!
Все ответы, в которых говорится, что {num} фактически создает переменную с именем num, неверны.
Если мы создадим переменную, которая является числом, используя {1}, переменная $GLOBALS не будет иметь его.
Но массив, возвращаемый
get_defined_vars()
наверно, есть (иногда не понимаю)...
Теперь, если я применяю эту логику другим способом, используя $GLOBALS для определения переменной, то же самое обязательно произойдет.
Использование этой (грязной / нестабильной) логики определенно не рекомендуется (как это прямо описано в документации), и я почти уверен, что вы никогда не откажетесь от имен переменных при программировании, если вы не слишком увлечены синтаксической краткостью.
Поэтому, пожалуйста, избегайте использования чисел в начале / в качестве имен переменных, как вы ожидали бы сделать на других языках.
Это своего рода наследие, начиная с ранее разработанных языков, таких как C, Fortran и т. Д. Кроме того, некоторые языки сценариев оболочки имеют специальные средства для идентификаторов, которые начинаются с цифры, а именно входные параметры. Стандарты PHP просто решили соблюдать это общее правило.
Вы не можете назвать переменную, начинающуюся с числа (или просто числа в этом отношении). То, что вы можете сделать, это использовать другой символ для начала (например, подчеркивание, или трехбуквенную комбинацию, говорящую, что это за тип переменной:
$_1 = $_REQUEST['1'];
или же
$str1 = $_REQUEST['1'];
Что вы также можете сделать, это использовать массив:
$retrievedValuesFromDB = array();
$retrievedValuesFromDB['1'] = $_REQUEST['1'];
Таким образом, вы можете проходить через оба одновременно:
$i=1;
while ($i<mysql_num_rows())
{
$retrievedValuesFromDB[$i] = $_REQUEST[$i];
$i++;
}
Вы не можете определить переменную, начинающуюся с цифр в PHP. Посмотрите на ссылку ниже. Он имеет основы определения переменных.