Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Для чего используются эти скобки?


Автор: BASILIO 21.3.2008, 19:59
Сабж

{}

В теме о безопасности в ПХП было написано что переменные в них заключать надо, можете обяснить что будет при этом происходить?

Зарание Спасибо

Автор: Feldmarschall 23.3.2008, 13:42
во-первых, непонятно, почему вопрос про синтаксис РНР задан в разделе по MySQL 
во-вторых, про синтакстис РНР надо читать в документации РНР: http://php.net/types.string
в-третьих, к безопасности это не имеет никакого отношения.

Автор: skyboy 24.3.2008, 01:08
Feldmarschall, странно. видел эту тему в PHP. возможно, кто-то промахнулся при переносе темы.

Автор: BASILIO 24.3.2008, 01:17
skyboy, нет, тему создавал в майсквл



Feldmarschall, 

1. Насколько я помню, скобки были в синтаксе сквела, потому сюда
2. Не все способны понять текст мануала, я часто не понимаю мануалы, чтоб мне понять один мануал часто надо прочитать ешчё штук 10, потому спрашиваю у людей, которые могут подскозать напрямую на понятном языке, если нету желания помочь, не вижу смысла писать в теме
3. -Ето было, написано в теме о безопасности, тама как типа бороться против сквл-инэкций

Автор: awers 24.3.2008, 02:12
BASILIO, 
Код

$string = "fasdhf shdfkh shkfj {$object->val}";


Ты это имел в виду? Конечно ненадо. Правильно так:
 
Код

$string = 'fasdhf shdfkh shkfj '.{$object->val};


засыпал, сорри ))) конечно я имел в виду 
 
Код

$string = 'fasdhf shdfkh shkfj '.$object->val;

Автор: DioNiR 24.3.2008, 03:55
По мне лучше уж писать так:
Код
$a = 'sdgsdgdsg '.$b.' sDgsdg ';

нежели
Код
$a = 'sdgsdgdsg {$b} sDgsdg ';


Так как не все редакторы подсвечиваются второй пример. Когда в пером он подсветит где переменная а где текст.
В целях безопасности эти варианты идентичны. Впринципи тут не иммет роль как ты напишешь на безопасность тут не повлияет. Повлияет только время загрузки. Так как
Код
$a = 'sdgsdgdsg $b sDgsdg ';

Будет работать дольше нежели 
Код
$a = 'sdgsdgdsg '.$b.' sDgsdg ';

Код
$a = 'sdgsdgdsg {$b} sDgsdg ';

Автор: szz 24.3.2008, 04:08
DioNiR, 
Код
$a = 'sdgsdgdsg $b sDgsdg ';
 ообще работать не будет. Двойные имел ввиду?

Автор: BASILIO 24.3.2008, 05:53
Ну и кому пришла в голову идея перенести тему?!?

ТЕМА ПРО MYSQL  ЗАПРОСЫ БЛИН

Добавлено через 5 минут и 37 секунд
Цитата(Alx @  8.1.2006,  16:37 Найти цитируемый пост)
Код

SELECT * FROM _tbl WHERE _cell = '{$cell}';


Вот -ето иммелось ввиду





ПС: Модератор, перенеси плз тему туда откуда взяли, и больше так не делайте, я данный форум знаю с его пелёнок и знаю что куда постить, так что не надо мне указывать куда мне постить, чтоб я не указывал напровление вашего похода. Спасибо

Автор: TUMS 24.3.2008, 06:50
Модератор прав, ибо {$cell} берётся из PHP.
Поэтому комментарии предыдущих авторов тоже верны.

Автор: Feldmarschall 24.3.2008, 10:19
BASILIO, 
Цитата(BASILIO @  24.3.2008,  01:17 Найти цитируемый пост)
1. Насколько я помню, скобки были в синтаксе сквела, потому сюда

К синтаксису SQL эти скобки не имеют никакого отношения.
Цитата(BASILIO @  24.3.2008,  01:17 Найти цитируемый пост)
2. Не все способны понять текст мануала, я часто не понимаю мануалы, 

Если тебе что-то непонятно, то надо показать конкретное место в мануале, которое ты не понял, и попросить разъяснений.
В данном же случае, я считаю, ты просто поленился прочитать, и даже не открывал мануал.
Цитата(BASILIO @  24.3.2008,  01:17 Найти цитируемый пост)
если нету желания помочь, не вижу смысла писать в теме

убедительно прошу воздержаться от подобных заявлений, оскорбляющих меня, как профессионала. В противном случае буду вынужден обратиться к администрации.
Цитата(BASILIO @  24.3.2008,  01:17 Найти цитируемый пост)
3. -Ето было, написано в теме о безопасности, тама как типа бороться против сквл-инэкций 

Либо там написана глупость, либо ты неправильно понял.

Автор: skyboy 24.3.2008, 14:52
Цитата(BASILIO @  24.3.2008,  00:17 Найти цитируемый пост)
сли нету желания помочь, не вижу смысла писать в теме


 ! 
skyboy
Не переходи на личности и не закрывай никому рот.


Автор: flashaa 24.3.2008, 14:57
Цитата(awers @  24.3.2008,  02:12 Найти цитируемый пост)
BASILIO, 
1:
    
$string = "fasdhf shdfkh shkfj {$object->val}";


Ты это имел в виду? Конечно ненадо. Правильно так:
 

$string = 'fasdhf shdfkh shkfj '.{$object->val};


засыпал, сорри ))) конечно я имел в виду 
 

$string = 'fasdhf shdfkh shkfj '.$object->val;


Awers, а что плохого в "... {$object->val}" ? 

Автор: awers 24.3.2008, 15:06
flashaa, скорость работы. изначально все что в ' '  - считается текстом и пхп не ищет внутри переменные, все что заключено в " " - это смешанный тескт и переменные. Обработка "фыволдра ыов лоролр {$myVar}" будет дольше чем 'фыволдра ыов лоролр '.$myVar 

Советую почитать статьи по оптимизации кода и еще неплохо было бы посмотреть исходники пхп.

Автор: Feldmarschall 24.3.2008, 15:07
Я думаю, это вопрос вкуса., и принципиальной разницы нет.
Хотя второй вариант читабельнее в большинстве систем с подсветкой кода.

Добавлено через 59 секунд
Ой, awers, вот только это не надо, плиз.
Ну не бывает ситуаций, когда скорость обработки строк в разных кавычках хоть на что-нибудь влияла бы

Автор: awers 24.3.2008, 15:10
Feldmarschall, там где на сервер очень большие нагузки - разница есть. Проверял сам. Да, это не 3-5%, но 1-1,5 будет (ну конечно от ситуации и количества таких использований)

Автор: flashaa 24.3.2008, 15:10
awers, я думаю одна переменная в такой строке увеличит время работы на одну милиярдную секунды ) К тому же конкатенация - тоже операция и она не моментально выполняется. Хотя вообщем я с тобой согласен. Но в последнее время немного раздражает писать отдельные строки, это получается несколько дольше, чем написать переменную в двойных кавычках. К тому же редакторы подсвечивают переменную в строке и она не теряется из вида, а фигурные скобки гарантируют то, что имя переменной не сольется с какой-нибудь частью строки.

Автор: awers 24.3.2008, 15:13
flashaa, в случае с использованием "sjkfhjsdh {$var}" это да, но тут фигурные скобки были сделаны по большей части для обращения к сложным объектам типа "zahsadhf {$obj->data[$silver]->get()->row(1)}" ...

Автор: Feldmarschall 24.3.2008, 15:14
Неправда.Там и 0,01 процента не будет.
Учитывая поднимающийся апач, кучу файловых операций, не говоря уже об обработке запросов и получении данных - на этом фоне парсинг строк вообще незаметен. покажи мне тест, который запускает apache benchmark, эмулируя "очень большие нагузки", и показывает хоть какую-то разницу.
Тесты "мильён итераций бессмысленных операций" давно уже никого не впечатляют.

Автор: flashaa 24.3.2008, 15:20
Предлагаю просто посмотреть исходники PHP там где идет парсинг строк и где конкатенация )

Автор: awers 24.3.2008, 15:22
хотя бог его конечно знает что они смогли выдавить из 5ого пхп, может и вправду почти одинаково. может вечерком посмотрю исходники, на работе нет

Автор: Feldmarschall 24.3.2008, 15:48
awers, я думаю, ты имеешь в виду http://blog.libssh2.org/index.php?/archives/28-How-long-is-a-piece-of-string.html, после публикации которой, действительно, парсинг строк в двойных кавычках подоптимизировали. Но дело-то даже не в этом. И без той оптимизации разница неосязаема.
Никто, почему-то, не задумывается, что рядом, в том же самом скрипте, лежат конструкции, которые парсятся в тыщи опкодов! На фоне которых разница уже не видна. И это только на уровне интерпретации пхп.
А мы не берем веб-сервер. который совершает десятки файловых операций, каждая из которых рядом с этими опкодами не стояла. 
Ну не имеет смысла считать копейки при покупке мерседеса.
Даже при покупке колбасы никто копейки не считает. Отбрасывают. А здесь эти неразличимые взгляду затраты прямо бревном в глазу стоят у некоторых. Написал строку в двойных кавычках - все, скрипты умерли.

Автор: Fortop 24.3.2008, 16:05
Цитата(Feldmarschall @  24.3.2008,  15:48 Найти цитируемый пост)
А здесь эти неразличимые взгляду затраты прямо бревном в глазу стоят у некоторых.

Лучше бы это smile Написал статью о правильной архитектуре приложений и проектировании систем. Чтобы народ не мучался с оптимизациями.
Я лично, с удовольствием бы почитал

Автор: awers 24.3.2008, 16:31
Вообще пошла уже религия, я небуду спорить, просто мне бы хотелось делать правильно. Может это и некчему, но всеже

Автор: bars80080 24.3.2008, 17:06
да оно просто понятней выглядит
Цитата(Feldmarschall @  24.3.2008,  14:07 Найти цитируемый пост)
Хотя второй вариант читабельнее в большинстве систем с подсветкой кода.

когда начинается чехарда с переменными, а потом с пмассивами, да не простыми, а многомерными, а тем более с объектами в этих двойных кавычках, то легко запутаться и потом лезть на форум с вопросом: почему не работает?
а так сцепил их наподобии состава и сразу видно, вот переменная, вот чистый текст

Автор: BASILIO 24.3.2008, 19:19
Дискуссия у вас интерсная, много чего есть почитать, но всё равно не нашол ответа на вопрос


Какую роль играют ковычки в этом коде?

Цитата(BASILIO @  24.3.2008,  05:53 Найти цитируемый пост)
Код

SELECT * FROM _tbl WHERE _cell = '{$cell}';


Автор: Feldmarschall 24.3.2008, 19:42
http://phpfaq.ru/slashes. Если у тебя возникает какой-то вопрос по этим темам - идешь и читаешь.

Автор: awers 24.3.2008, 20:25
BASILIO, ты привел не полный код. скорее всего это 
Код

$cell = "mycell";
$query = "SELECT * FROM _tbl WHERE _cell = '{$cell}';";


это просто экранировка переменной, во избежании сливания с простым текстом

Автор: Feldmarschall 24.3.2008, 22:03
awers, думаешь, он спрашивает не про кавычки, а про скобки? 
Вообще да, может быть. 

Автор: BASILIO 24.3.2008, 22:14
Да, я спрашивал про скобки, сверху немного опечатался.

Что означает:


Цитата(awers @  24.3.2008,  20:25 Найти цитируемый пост)
экранировка переменной



?

Автор: Feldmarschall 24.3.2008, 22:29
Что это означает, написано по ссылке, которую я привел в самом первом ответе на твой вопрос.
Давай ты хотя бы попытаешься прочесть, и только потом, если что-то будет непонятно, будешь задавать вопросы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)