Что касается производительности, есть ли разница между выполнением:
$message = "The request $request has $n errors";
и
$message = sprintf('The request %s has %d errors', $request, $n);
в PHP?
Я бы сказал, что вызов функции требует большего, но я не знаю, что PHP делает за сцены для раскрытия имен переменных.
Спасибо!
Я удивлен, но для PHP 7.* "замена $variables" является самым быстрым подходом :
$message = "The request {$request} has {$n} errors";
можно просто доказать его сами:
$request = "XYZ";
$n = "0";
$mtime = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
$message = "The request {$request} has {$n} errors";
}
$ctime = microtime(true);
echo '
"variable $replacement timing": '. ($ctime-$mtime);
$request = "XYZ";
$n = "0";
$mtime = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
$message = 'The request '.$request.' has '.$n.' errors';
}
$ctime = microtime(true);
echo '
"concatenation" . $timing: '. ($ctime-$mtime);
$request = "XYZ";
$n = "0";
$mtime = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
$message = sprintf('The request %s has %d errors', $request, $n);
}
$ctime = microtime(true);
echo '
sprintf("%s", $timing): '. ($ctime-$mtime);
результат для [1 119] PHP 7.3.5 :
"переменная синхронизация $replacement": 0.091434955596924
"конкатенация". $timing: 0.11175799369812
sprintf (" %s", $timing): 0.17482495307922
, Вероятно, Вы уже нашли рекомендации как 'использование sprintf вместо переменных содержавшимися в двойных кавычках, it’s о 10x быстрее'. , Каковы некоторые хорошие подсказки по производительности PHP?
я вижу, что это была истина, но однажды. А именно, перед PHP 5.2.*
Вот образец того, как это было в те дни PHP 5.1.6 :
"переменная синхронизация $replacement": 0.67681694030762
"конкатенация". $timing: 0.24738907814026
sprintf (" %s", $timing): 0.61580610275269