[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: $array[0] и $array{0} В чём отличие?
ILYA
При обращении к массиву $array = array('zero','first','second'); К первому элементу можно обратиться как $array[0]; а можно как $array{0};
Я в документации на русском так и не смог найти в чём отличие фигурных скобок от квадратных.
Если знаете, то расскажите и скиньте ссылочки где можно почитать про фигурные скобки.



Спустя 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
Большое спасибо за ответы smile.gif

Про ${$a}[0]; я не знал, и из всего выше прочитанного для себя решил, что разыменование переменной с косвенным обращением к массиву - это лучшее и единственное применение фигурным скобкам.
Для прямого обращения к элементу массиву или символа строки лучше использовать квадратные скобки.
Двойные кавычки же нужно применять только для генерации символов типа "\r\n", и то в сочетании с конкатенацией или передачей параметров (если сразу выводится через echo) ИМХО!

Спустя 6 минут, 33 секунды (14.03.2012 - 00:24) glock18 написал(а):
Цитата (ILYA @ 13.03.2012 - 21:18)
Tim, sergeiss
Большое спасибо за ответы smile.gif

Про ${$a}[0]; я не знал, и из всего выше прочитанного для себя решил, что разыменование переменной с косвенным обращением к массиву - это лучшее и единственное применение фигурным скобкам.
Для прямого обращения к элементу массиву или символа строки лучше использовать квадратные скобки.
Двойные кавычки же нужно применять только для генерации символов типа "\r\n", и то в сочетании с конкатенацией или передачей параметров (если сразу выводится через echo) ИМХО!

ну, фигурные скобки еще ничего так подходят для выделения блоков rolleyes.gif smile.gif

а в целом вывод правильный, обращение к элементам по {} скорее побочный эффект от какой-то фичи, например упомянутое косвенное обращение.

Спустя 1 час, 3 минуты, 40 секунд (14.03.2012 - 01:28) ILYA написал(а):
glock18 о да... блоки как-то я про них забыл smile.gif)

Спустя 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) ИМХО!

Вовсе не обязательно smile.gif Их можно и нужно использовать при формировании строк. Более удобно, более красиво, меньше вероятность запутаться в "лишних" кавычках и точках - их просто не будет.

Спустя 41 минута, 19 секунд (14.03.2012 - 08:54) glock18 написал(а):
Цитата (sergeiss @ 14.03.2012 - 05:12)
Цитата (ILYA @ 14.03.2012 - 01:18)
Двойные кавычки же нужно применять только для генерации символов типа "\r\n", и то в сочетании с конкатенацией или передачей параметров (если сразу выводится через echo) ИМХО!

Вовсе не обязательно smile.gif Их можно и нужно использовать при формировании строк. Более удобно, более красиво, меньше вероятность запутаться в "лишних" кавычках и точках - их просто не будет.

спорно вообще то. Не потому, что я думаю иначе, а потому что и тот, и тот подход пользуются спросом. И каждый должен пользоваться тем подходом, который предполагается принятыми правилами оформления кода.

Я лично пользовался и тем, и другим. Не согласен по этой причине, ни с теми, кто горячо отстаивает конкатенацию, и не с теми, кто так же горячо отстаивает встраивание переменных в строку. Оба подхода имеют, как плюсы, так и минусы, на мой личный взгляд, спорить какой из них лучше, все равно что сравнивать в очередной раз быстродействие 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)
Цитата (glock18 @ 14.03.2012 - 09:54)
потому что и тот, и тот подход пользуются спросом

Да, пользуются спросом :)

Прикинь. Много раз было. На форуме человек показывает код типа такого
$sql=...;

$sql .= "'".$abc."','".$bcd."','".$cde."','".$bds."','".$hsd."'"; // таких строчек много и все они намного длиннее

$sql .= ....;

и плюс к этому обработчик данных в ПХП, строк на 200-400. И говорит, что у него ПХП не работает... А у него там где-то в этом лесу из точек, одинарных и двойных кавычек чего-то не хвататет. Но это очень сложно увидеть, потому что "налеплено" так, что просто на самом деле плохо видно.

Вот тут и начинаешь задумываться, что "нуегонафиг", эту конкатенацию ;)

Хорошее замечание. Мое личное мнение, что в sql-запросах встраивание переменных как нигде оправдано. Ну, если речь о подготовленных запросах, то проблемы этой вообще нет

Спустя 53 минуты, 53 секунды (14.03.2012 - 11:01) vital написал(а):
Цитата (sergeiss @ 14.03.2012 - 08:57)
Цитата (glock18 @ 14.03.2012 - 09:54)
потому что и тот, и тот подход пользуются спросом

Да, пользуются спросом :)

Прикинь. Много раз было. На форуме человек показывает код типа такого
$sql=...;

$sql .= "'".$abc."','".$bcd."','".$cde."','".$bds."','".$hsd."'"; // таких строчек много и все они намного длиннее

$sql .= ....;

и плюс к этому обработчик данных в ПХП, строк на 200-400. И говорит, что у него ПХП не работает... А у него там где-то в этом лесу из точек, одинарных и двойных кавычек чего-то не хвататет. Но это очень сложно увидеть, потому что "налеплено" так, что просто на самом деле плохо видно.

Вот тут и начинаешь задумываться, что "нуегонафиг", эту конкатенацию ;)

Ударить по рукам, рассказать про PDO и prepared statements.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.