Я в документации на русском так и не смог найти в чём отличие фигурных скобок от квадратных.
Если знаете, то расскажите и скиньте ссылочки где можно почитать про фигурные скобки.
Спустя 6 часов, 18 минут, 50 секунд (13.03.2012 - 01:17) Tim написал(а):
Цитата |
Like in Perl, you can use curly braces ({}) instead of square brackets ([]) to access array members: <?php $a = array (); $a[7] = 'seven'; $a{'hello'} = 'world'; print $a{7} . ' ' . $a['hello']; ?> Prints 'seven world'. |
Возможно, просто для того, чтобы было как в Perl.
Возможно чтобы не путать в коде строки и массивы. К символам строки также можно обращаться с помощью фигурных и квадратных скобок. Если использовать одни и те же скобки для строк и массивов то потом можно запутаться где что.
Ещё с фигурными скобками можно вот такое делать:
$myArray = Array('value_0', 'value_1');
$a = 'myArray';
print ${$a}[0]; // value_0
Спустя 7 часов, 25 минут, 51 секунда (13.03.2012 - 08:43) sergeiss написал(а):
Еще добавлю. Могут быть ситуации, где эти скобки невзаимозаменяемые.
Вот пример. Формируем строку для вывода.
Фигурные скобки в данном случае имеют другой смысл, а для элементов массива можно будет использвоать только квадратные скобки.
Тут даже подсветка кода показывает, что в последнем случае "что-то не так".
Вот пример. Формируем строку для вывода.
$a=array( 4,5,6);
$s="1-й элемент массива {$a[0]}<br>"; // так работает
echo $s;
$s="1-й элемент массива $a[0]<br>"; // и так работает
echo $s;
$s="1-й элемент массива $a{0}<br>"; // а вот так - не работает!
echo $s;
Фигурные скобки в данном случае имеют другой смысл, а для элементов массива можно будет использвоать только квадратные скобки.
Тут даже подсветка кода показывает, что в последнем случае "что-то не так".
Спустя 15 часов, 34 минуты, 40 секунд (14.03.2012 - 00:18) ILYA написал(а):
Tim, sergeiss
Большое спасибо за ответы
Про ${$a}[0]; я не знал, и из всего выше прочитанного для себя решил, что разыменование переменной с косвенным обращением к массиву - это лучшее и единственное применение фигурным скобкам.
Для прямого обращения к элементу массиву или символа строки лучше использовать квадратные скобки.
Двойные кавычки же нужно применять только для генерации символов типа "\r\n", и то в сочетании с конкатенацией или передачей параметров (если сразу выводится через echo) ИМХО!
Большое спасибо за ответы
Про ${$a}[0]; я не знал, и из всего выше прочитанного для себя решил, что разыменование переменной с косвенным обращением к массиву - это лучшее и единственное применение фигурным скобкам.
Для прямого обращения к элементу массиву или символа строки лучше использовать квадратные скобки.
Двойные кавычки же нужно применять только для генерации символов типа "\r\n", и то в сочетании с конкатенацией или передачей параметров (если сразу выводится через echo) ИМХО!
Спустя 6 минут, 33 секунды (14.03.2012 - 00:24) glock18 написал(а):
Цитата (ILYA @ 13.03.2012 - 21:18) |
Tim, sergeiss Большое спасибо за ответы Про ${$a}[0]; я не знал, и из всего выше прочитанного для себя решил, что разыменование переменной с косвенным обращением к массиву - это лучшее и единственное применение фигурным скобкам. Для прямого обращения к элементу массиву или символа строки лучше использовать квадратные скобки. Двойные кавычки же нужно применять только для генерации символов типа "\r\n", и то в сочетании с конкатенацией или передачей параметров (если сразу выводится через echo) ИМХО! |
ну, фигурные скобки еще ничего так подходят для выделения блоков
а в целом вывод правильный, обращение к элементам по {} скорее побочный эффект от какой-то фичи, например упомянутое косвенное обращение.
Спустя 1 час, 3 минуты, 40 секунд (14.03.2012 - 01:28) ILYA написал(а):
glock18 о да... блоки как-то я про них забыл )
Спустя 50 минут, 31 секунда (14.03.2012 - 02:19) Commander Keen написал(а):
Не
! |
sergeiss |
как правильно, а как не правильно! Говорите, как нужно писать!
! |
sergeiss |
На этом форуме, согласно Правил Форума http://phpforum.ru/index.php?act=boardrules принято общение на русском языке, без мата. За повторение будет длительный бан.
Спустя 5 часов, 53 минуты, 54 секунды (14.03.2012 - 08:12) sergeiss написал(а):
Цитата (ILYA @ 14.03.2012 - 01:18) |
Двойные кавычки же нужно применять только для генерации символов типа "\r\n", и то в сочетании с конкатенацией или передачей параметров (если сразу выводится через echo) ИМХО! |
Вовсе не обязательно Их можно и нужно использовать при формировании строк. Более удобно, более красиво, меньше вероятность запутаться в "лишних" кавычках и точках - их просто не будет.
Спустя 41 минута, 19 секунд (14.03.2012 - 08:54) glock18 написал(а):
Цитата (sergeiss @ 14.03.2012 - 05:12) | ||
Вовсе не обязательно Их можно и нужно использовать при формировании строк. Более удобно, более красиво, меньше вероятность запутаться в "лишних" кавычках и точках - их просто не будет. |
спорно вообще то. Не потому, что я думаю иначе, а потому что и тот, и тот подход пользуются спросом. И каждый должен пользоваться тем подходом, который предполагается принятыми правилами оформления кода.
Я лично пользовался и тем, и другим. Не согласен по этой причине, ни с теми, кто горячо отстаивает конкатенацию, и не с теми, кто так же горячо отстаивает встраивание переменных в строку. Оба подхода имеют, как плюсы, так и минусы, на мой личный взгляд, спорить какой из них лучше, все равно что сравнивать в очередной раз быстродействие print vs echo.
PS: замечу, что, разумеется, конкатенация работает быстрее. тем не менее, разница эта невелика, и нравится это или нет, но мощности компьютеров сейчас предрасполагают к тому, чтобы разработчики в первую очередь могли думать об собственном удобстве, а уже потом а таких незначительных различиях в скорости
Спустя 1 час, 3 минуты, 34 секунды (14.03.2012 - 09:57) sergeiss написал(а):
Цитата (glock18 @ 14.03.2012 - 09:54) |
потому что и тот, и тот подход пользуются спросом |
Да, пользуются спросом :)
Прикинь. Много раз было. На форуме человек показывает код типа такого
$sql=...;
$sql .= "'".$abc."','".$bcd."','".$cde."','".$bds."','".$hsd."'"; // таких строчек много и все они намного длиннее
$sql .= ....;
и плюс к этому обработчик данных в ПХП, строк на 200-400. И говорит, что у него ПХП не работает... А у него там где-то в этом лесу из точек, одинарных и двойных кавычек чего-то не хвататет. Но это очень сложно увидеть, потому что "налеплено" так, что просто на самом деле плохо видно.
Вот тут и начинаешь задумываться, что "нуегонафиг", эту конкатенацию ;)
Спустя 9 минут, 29 секунд (14.03.2012 - 10:07) glock18 написал(а):
Цитата (sergeiss @ 14.03.2012 - 06:57) | ||
Да, пользуются спросом :) Прикинь. Много раз было. На форуме человек показывает код типа такого $sql=...; и плюс к этому обработчик данных в ПХП, строк на 200-400. И говорит, что у него ПХП не работает... А у него там где-то в этом лесу из точек, одинарных и двойных кавычек чего-то не хвататет. Но это очень сложно увидеть, потому что "налеплено" так, что просто на самом деле плохо видно. Вот тут и начинаешь задумываться, что "нуегонафиг", эту конкатенацию ;) |
Хорошее замечание. Мое личное мнение, что в sql-запросах встраивание переменных как нигде оправдано. Ну, если речь о подготовленных запросах, то проблемы этой вообще нет
Спустя 53 минуты, 53 секунды (14.03.2012 - 11:01) vital написал(а):
Цитата (sergeiss @ 14.03.2012 - 08:57) | ||
Да, пользуются спросом :) Прикинь. Много раз было. На форуме человек показывает код типа такого $sql=...; и плюс к этому обработчик данных в ПХП, строк на 200-400. И говорит, что у него ПХП не работает... А у него там где-то в этом лесу из точек, одинарных и двойных кавычек чего-то не хвататет. Но это очень сложно увидеть, потому что "налеплено" так, что просто на самом деле плохо видно. Вот тут и начинаешь задумываться, что "нуегонафиг", эту конкатенацию ;) |
Ударить по рукам, рассказать про PDO и prepared statements.