строки concat php;с помощью .оператор или двойные кавычки - PullRequest
4 голосов
/ 28 июля 2011

Редактировать - Мой вопрос не ограничен преформанцией, я также хотел бы знать подводные камни каждого и, если есть условие, когда один должен использоваться поверх другого.

Что лучше использовать для объединения строк в PHP?

Вариант A: используйте. оператор для объединения строк

$string1 = "hello ";
$string2 = $string1 . "world !";

Вариант B: использовать двойные кавычки

$string1 = "hello ";
$string2 = "$string1 world !";

Я понимаю, что на самом деле оба будут делать одно и то же, и в моем личном развитии я предпочитаю использовать. оператор. Мой вопрос возникает только потому, что я прочитал, что. оператор заставляет php повторно объединяться с каждой новой строкой, поэтому в примере:

$string1 = "hello ";
$string2 = "world";
$string3 = $string1.$string2." !";

будет работать медленнее, чем

$stirng1 = "hello";
$string2 = "world";
$string3 = "$string1 $string2 !";

Справка: Операторы языка PHP> Строки

Ответы [ 3 ]

4 голосов
/ 28 июля 2011

Конкатенация почти всегда быстрее, чем интерполяция, но различие редко бывает достаточно значительным, чтобы гарантировать заботу. Тем не менее, я предпочитаю конкатенацию, потому что она позволяет легче редактировать, когда (например) вы хотите изменить строку на вызов метода или функции. Т.е. от:

$s1 = 'this ' . $thing . ' with a thing';

Кому:

$s1 = 'this ' . blarg($thing) . ' with a thing';

Редактировать: Когда я говорю: «Конкатенация почти всегда быстрее, чем интерполяция», я имею в виду то, что на самом деле я сравнивал многие ее различные формы, и я не просто гадал или повторял чей-то пост. Это легко сделать, попробуйте.

3 голосов
/ 28 июля 2011

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

Для каждой петли я сделал 100 000 проходов. Теперь я нигде не печатал свои строки, поэтому, если из-за этого оптимизатор PHP забирает всю мою работу, я приношу свои извинения. Однако, глядя на эти результаты, вы видите разницу в 0,00001 секунды для каждого.

Прежде чем оптимизировать что-либо, кроме читабельности, используйте профилировщик и посмотрите, где находятся ваши горячие точки. Если вы запустили десятки миллионов конкатенаций, у вас может быть аргумент. Но с 1000 вы все еще говорите о разнице в 0,01 секунды. Я уверен, что вы могли бы сэкономить более 0,01 секунды, просто оптимизируя запросы SQL и тому подобное.

Мое доказательство ниже ....

Вот что я пробежал:

<?php
for($l = 0; $l < 5; $l++)
  {
    echo "Pass " .$l. ": \n";
    $starta = microtime(1);
    for( $i = 0; $i < 100000; $i++)
      {
    $a = md5(rand());
    $b = md5(rand());
    $c = "$a $b".' Hello';
      }
    $enda = microtime(1);

    $startb = microtime(1);
    for( $i = 0; $i < 100000; $i++)
      {
    $a = md5(rand());
    $b = md5(rand());
    $c = $a . ' ' . $b . ' Hello';
      }
    $endb = microtime(1);


    echo "\tFirst method: " . ($enda - $starta) . "\n";
    echo "\tSecond method: " . ($endb - $startb) . "\n";
  }

Вот результаты:

Pass 0: 
    First method: 1.3060460090637
    Second method: 1.3552670478821
Pass 1: 
    First method: 1.2648279666901
    Second method: 1.2579910755157
Pass 2: 
    First method: 1.2534148693085
    Second method: 1.2467019557953
Pass 3: 
    First method: 1.2516458034515
    Second method: 1.2479140758514
Pass 4: 
    First method: 1.2541329860687
    Second method: 1.2839770317078
2 голосов
/ 28 июля 2011

Если вам нужно собрать одновременно большое количество строк, рассмотрите implode().

$result = implode('', $array_of_strings);

Для незначительного числа строк используемый метод не имеет заметных отличий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...