За последние 24 часа нас посетили 18109 программистов и 1599 роботов. Сейчас ищут 885 программистов ...

Конкатенация. Использовать ли?

Тема в разделе "Прочие вопросы по PHP", создана пользователем xaocbozzz, 15 июн 2012.

  1. xaocbozzz

    xaocbozzz Активный пользователь

    С нами с:
    4 апр 2012
    Сообщения:
    19
    Симпатии:
    0
    Забьем переменные:
    Код (Text):
    1. $b = 1;
    2. $a = 0;
    Выведем их:
    Код (Text):
    1. echo "b=$b, a=$a";
    //вывод b=1, a=0
    Код (Text):
    1. echo "b=".$b.", a=".$a;
    // опять же вывод b=1, a=0
    Известно, что если привести значение к строке:
    Код (Text):
    1. $b = '1';
    2. $a = '0';
    То с обоими вариантами будет тоже самое.
    Использовать ли конкатенацию в данном случае?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а по каким критериям стоит принимать решение? =)
     
  3. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Где-то читал статью об оптимизации php-кода. Там писали, что конкатенацию надо использовать в любом случае - если писать все в " " - это замедляет работу программы на 40%

    Добавлено спустя 52 секунды:
    _http://php.spb.ru/php/speed.html
     
  4. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Последнее изменение страницы 17 апреля 2003 г. 19:01:59

    xaocbozzz, в приведенном тобой случае - не заморачиваться.
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    чем больше в " " напихнуто, тем больше будет отличие. Однако удобство весьма велико. Т.е. если у вас страница не весит 200 кб сама по себе без скриптов и цсс, то не стоит морочиться. Разница между 15 мс и 20 мс это 30%. Стоит ли морочиться?
     
  6. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    Конечно дело привычки, но мне не удобно ваще ни разу :)
    никогда не пользуюсь.
    но если кому удобно, то если не злоупотреблять - можно и не заморачиваться
     
  7. Pran

    Pran Активный пользователь

    С нами с:
    15 янв 2011
    Сообщения:
    39
    Симпатии:
    0
    Проводил замеры относительно конкатенации: ссылка. Если не в двойных кавычках, то приведённым там способом через ob_start() ... ob_get_clean(), работает быстрее сложной конкатенации. Однако такое использую в глубинах движка и лишь изредка в более насущных кодах: если вместо этого оптимизировать запросы к базе, выигрыш может составить до 1000% по сравнению с конкатенацией за один жизненный цикл страницы (сокращение на 0,000231 сек у конкатенации или сокращение на 0,3 сек у запроса).

    Примечание: машина мощная, поэтому величины в тесте довольно мизерные. Попробуйте запустить тест у себя и поиграть с количеством итераций. Деление в конце должно осуществляться на число итераций внешнего цикла.
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Сколько ж у тебя там запросов?
     
  9. Pran

    Pran Активный пользователь

    С нами с:
    15 янв 2011
    Сообщения:
    39
    Симпатии:
    0
    Пара наводящих и один монстр-запрос, на который приходится 0,6 сек из-за особенностей межтабличных связей от прежних разработчиков. Разделил набор пополам, проиндексировал и т.д. -- получилось 0,3. Но это офф-топик. Авось, расскажу как-нибудь.
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    добавь полей с предварительными данными, наверняка ускорится.

    давай запрос ковырять, это куда как интереснее. создай темку в разделе про бд
     
  11. Pran

    Pran Активный пользователь

    С нами с:
    15 янв 2011
    Сообщения:
    39
    Симпатии:
    0
    Готово: ссылка. Вводная часть в проблему того запроса :)
     
  12. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    такие цифры в веб-разработке мне кажутся погрешностью измерений
     
  13. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Код (PHP):
    1. <?php
    2. $a = 'a';
    3. $b = 'b';
    4. $c = 'c';
    5. $d = 'd';
    6. $e = 'e';
    7. $start = microtime(true);
    8. for($i = 0; $i < 1000000; ++$i)
    9.     $str = 'first: ' . $a . ', second: ' . $b . ', third: ' . $c . ', fourth: ' . $d . ', fifth: ' . $e;
    10. echo(round(microtime(true) - $start, 7) . ' sec.<br />');
    11. $start = microtime(true);
    12. for($i = 0; $i < 1000000; ++$i)
    13.     $str = "first: " . $a . ", second: " . $b . ", third: " . $c . ", fourth: " . $d . ", fifth: " . $e;
    14. echo(round(microtime(true) - $start, 7) . ' sec.<br />');
    15. $start = microtime(true);
    16. for($i = 0; $i < 1000000; ++$i)
    17.     $str = "first: $a, second: $b, third: $c, fourth: $d, fifth: $e";
    18. echo(round(microtime(true) - $start, 7) . ' sec.<br />');
    19. $start = microtime(true);
    20. for($i = 0; $i < 1000000; ++$i)
    21.     $str = "first: {$a}, second: {$b}, third: {$c}, fourth: {$d}, fifth: {$e}";
    22. echo(round(microtime(true) - $start, 7) . ' sec.');
    23. ?>
    Код (Text):
    1. 1.9601409 sec.
    2. 1.9202620 sec.
    3. 1.4336561 sec.
    4. 1.4673231 sec.
    Вывод: самое быстрое
    Код (PHP):
    1. $str = "first: $a, second: $b, third: $c, fourth: $d, fifth: $e"; 
     
  14. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    в больших проектах на вывод практически обязательно используется какой-то "шаблонизатор". а он работает НА ПОРЯДОК медленнее — это плата за удобство. не стоит заморачиваться микрооптимизацией.
     
  15. xaocbozzz

    xaocbozzz Активный пользователь

    С нами с:
    4 апр 2012
    Сообщения:
    19
    Симпатии:
    0
    А что дает использование фигурных скобок?
    Код (Text):
    1. $b = 1;
    2. $a = 0;
    3.  
    4. echo "b={$b}, a={$a}";
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Возможность вписать массив.
    Код (PHP):
    1. echo "$a[10] vs {$a[10]} вот"; 
    Добавлено спустя 34 секунды:Смени аватарку, не позорься =)
     
  17. xaocbozzz

    xaocbozzz Активный пользователь

    С нами с:
    4 апр 2012
    Сообщения:
    19
    Симпатии:
    0
    Ничего не понял.
    Код (Text):
    1. $choto[0] = "0";
    2. $choto[1] = "1";
    3.  
    4. echo "$chtoto[0] vs {$chtoto[1]} вот";
    Выводит:
    Код (Text):
    1. vs вот
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    по-разному переменные назвал =) вобщето
     
  19. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Раз уж говнокодить, то по черному:
    Код (PHP):
    1. $что–то[0] //в php прокатит  
     
  20. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Чёрточка не прокатит. Это же минус :)
     
  21. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Э нет, это не минус :) Это код под номером 150 из ASCII-таблицы

    Добавлено спустя 2 минуты 23 секунды:
    [​IMG]
     
  22. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
  23. xaocbozzz

    xaocbozzz Активный пользователь

    С нами с:
    4 апр 2012
    Сообщения:
    19
    Симпатии:
    0
    В общем никто не знает зачем нужны фигурные скобки в данном случае?
     
  24. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    написали, что для использования массивов и объектов. а в твоем примере "не работает", потому что ты по-разному написал в присваивании и в строке.
     
  25. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Не, ну правда, никто не знает?