For blocks of text, sprintf() is slow according to my tests.
Also, having the mapping between place-holders and the list of actual variables or datastructures often makes this code difficult to read. But the printf() family are widely supported and have a huge range of nice features. Performance is a cold mistress though!
From an ease-of-reading and maintenance, debugging point of view, I much prefer HEREDOC and "...{$variable}..." methods.
For a block of HTML markup with place holders, the fastest by far was:-
?>
<div> markup etc<?= $variable ?>more markup
<?
My tests comprised 20 runs of a loop of 1 million iterations with output buffering, ditching the buffer on each loop.
The timings ranged from average 2.1msec/million repetitions for the <?= $var ?> method up to 7.6msec/million using printf().
I'll try some benchmarking tools too, since I just wrote this myself and it could be introducing bias, but they've run on dev servers with low load.
Hopefully interesting.