GunnarD skrev:
Vilket är ungefär vad printf() funktionen gör :)
...
Yupp. Jag skulle dock vilja dra det en nivå till då jag upplever det enklare om man exempelvis vill visa samma värde två ggr etc.
Jag kikade in lite snabbt på php.net och första kommentaren här tror jag skulle passa som handen i hansken.
$str = "Hello, %(place)s, how is it hanning at %(place)s? %s works just as well";
$find = array(
'place' => 'world',
'sprintf',
'not used'
);
echo dsprintf($str, $find);
// 'Hello, world, how is it hanning at world? sprintf works just as well'
Fördelen som jag ser det att är dels om man vill ändra textsträngen och exempelvis presentera samma sträng på två ställen, så slipper man ändra i någon kod.
$lang["welcome"] = "Hej %s"
printf($lang["welcome"], "Olle");
...
$lang["welcome"] = "Hej %s, Hur mår du %s?"
printf($lang["welcome"], "Olle", "Olle");
... osv
Med ett variabelnamn behöver bara localizationsträngen ändras och inte koden.
$lang["welcome"] = "Hej %name"
my_function($lang["welcome"], Array('name' => "Olle"));
...
$lang["welcome"] = "Hej %name, Hur mår du %name%?"
my_function($lang["welcome"], Array('name' => "Olle"));
... osv
Dessutom om man sysslar med dokumentering, översättning till flera språk med kanske en kund och andra personer inblandade, är mitt förslag förmodligen imho många gånger smidigare att underhålla. Dessutom slipper man hålla koll på ordningen av argument, som nämnt duplicering av argument samt att %name% %age% %city% torde vara mer descriptivt än %s %s %s.