Разница в скорости при использовании встроенных строк против конкатенации в php5? - PullRequest
45 голосов
/ 17 августа 2008

(предположим php5) рассмотрим

<?php

    $foo = 'some words';

    //case 1
    print "these are $foo";

    //case 2
    print "these are {$foo}";

    //case 3
    print 'these are ' . $foo;
?>

Много ли различий между 1 и 2?

Если нет, то как быть между 1/2 и 3?

Ответы [ 12 ]

0 голосов
/ 26 апреля 2017

Следует отметить, что при использовании модифицированной версии примера Адамом Райтом с 3 переменными результаты меняются местами, и первые две функции на самом деле быстрее, последовательно. Это с PHP 7.1 на CLI:

function timeFunc($function, $runs)
{
    $times = array();

    for ($i = 0; $i < $runs; $i++)
    {
        $time = microtime();
        call_user_func($function);
        @$times[$i] = microtime() - $time;
    }

    return array_sum($times) / $runs;
}

function Method1()
{ 
    $foo = 'some words';
    $bar = 'other words';
    $bas = 3;
    for ($i = 0; $i < 10000; $i++)
         $t = "these are $foo, $bar and $bas";
}

function Method2()
{
    $foo = 'some words';
    $bar = 'other words';
    $bas = 3;
    for ($i = 0; $i < 10000; $i++)
         $t = "these are {$foo}, {$bar} and {$bas}";
}

function Method3()
{
    $foo = 'some words';
    $bar = 'other words';
    $bas = 3;
    for ($i = 0; $i < 10000; $i++)
         $t = "these are " . $foo . ", " . $bar . " and " .$bas;
}

print timeFunc('Method1', 10) . "\n";
print timeFunc('Method2', 10) . "\n";
print timeFunc('Method3', 10) . "\n";

Я также пытался использовать '3' вместо целого числа 3, но я получаю такие же результаты.

С $ bas = 3:

0.0016254
0.0015719
0.0019806

С $ bas = '3':

0.0016495
0.0015608
0.0022755

Следует отметить, что эти результаты сильно различаются (я получаю вариации около 300%), но средние значения кажутся относительно устойчивыми, и почти (9 из 10 случаев) всегда показывают более быстрое выполнение для 2 первых методов, с методом 2 всегда немного быстрее, чем метод 1.

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

0 голосов
/ 28 мая 2011

Практически нет разницы вообще! Смотрите время: http://micro -optimization.com / single-vs-double-quotes

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