Ola,

Ik vraag me af of een * wel eens gebruikt wordt als een replacement symbool in een tekst. Dus bijv.
"Hallo *, welkom op onze site.". Of zijn er andere/beter symbolen die je hiervoor kunt gebruiken?
als een soort template?

En als je nu 2 of 3 of 40 plaatsen iets wilt neerzetten?

Als je het op die manier wilt doen, dan zou ik iets als #NAAM# gebruiken, en verderop in de tekst bijvoorbeeld #DATUM# etc etc
In dit voorbeeld moet ik toevallig maar 1 ding vervangen dus dan zijn er geen meerdere plaatsen. Jij gebruikt nu een #, maar is dit bijvoorbeeld ook gebruikelijk: *NAAM* en *DATUM* ?

Of worden in dit soort situaties altijd hekjes gebruikt?
Volledig wat jij wilt.

In een templating language gebruik je bijv. {{ naam }}. Maar voor strings zou ik vaak gewoon de (s)printf methode aanhouden en %s gebruiken (eventueel met plaatscijfers). Of ik zou de Symfony parameter formaat gebruiken en %naam% gebruiken. Maar bijv. in Faker gebruik je ? voor letters en # voor cijfers. Met de CmfBlockBundle gebruik je weer |%block:name%|

Ah oké...

Ik heb nu een class, en bij een aantal methods gebruik ik een functie die een exception teruggeeft waarvan in de tekst het path moet worden vervangen door de meegegeven file of directory (zo... dat klinkt nog eens lekker onduidelijk :-) ) Maar dat kan ik niet (handig) met sprintf oplossen, dus dan gebruik ik even een string replace. Maar het gaat om simpele tekstjes zoals:

"can not remame file *"
"can not copy file *"
enz.

Die * moet dan vervangen worden, en ik vraag me af of * daar dan een "gangbaar" teken voor is. Eigenlijk is het een soort van joker-teken zeg maar.
Zoals Wouter ook al zei zou ik hiervoor gewoon sprintf() gebruiken. Ik meen me te herinneren dat jij een beetje een optimalisatiefetisjist bent ;-) en aangezien de ingebouwde functies van PHP in C zijn geschreven kun je daar qua performance nooit tegenop met je eigen PHP-code.
Maar dat kan ik niet (handig) met sprintf oplossen

Waarom kan dat niet?

En ja, je kan * gebruiken. Maar ik prefereer toch iets waarmee je duidelijk maakt wat het is, dus %s of %file_name%.

PS: De * wordt vaak gebruikt als wildchart teken, niet als replacement teken. Denk bijv. aan SELECT * FROM ... of glob('*.php').
Oké, thanks.

>> Waarom kan dat niet?

Ik moet in een heel enkel geval 2 dingen vervangen, en dan kan het dat ie de verkeerde vervangt.

Is dit dan overigens mogelijk met sprintf() ?

'dit is %s %s'

Kan ik nu in de eerste keer sprintf alleen de 2e %s vervangen en in de 2e keer alleen de eerste?
Dus zeg maar dit:

<?php
$string = sprintf('dit is %s %s', 'test'); // string moet nu worden 'dit is %s test';
$string = sprintf('dit is %s %s', 'een'); // string moet nu worden 'dit is een test';
?>
Kan je dat met sprintf voor elkaar krijgen? Dus bij de 1e keer sprintf moet de laatste %s worden vervangen, en bij de 2e keer moet de eerste %s worden vervangen. Kan dat? Want in dat geval kan ik het op die manier oplossen.
@Wouter:
En * wordt niet alleen gebruikt als wildcard, maar ook als quantifier in reguliere expressies...

@Ozzie:
Waarschijnlijk heb je iets voor ogen als:
<?php
$tmpl = 'Foo bar *';
$msg = 'baz';
echo str_replace('*', $msg, $tmpl);
?>
Dat verschilt eigenlijk niet van
<?php
$tmpl = 'Foo bar %s';
$msg = 'baz';
printf($tmpl, $msg);
?>
Ik ga het duidelijker proberen uit te leggen...

<?php
$string = 'dit is %s %s'; // dit is de begin-string
$string = sprintf($string, 'test'); // string moet nu worden 'dit is %s test';
$string = sprintf($string, 'een'); // string moet nu worden 'dit is een test';
?>
Snap je wat ik bedoel?
Oh, je had al geantwoord ;-)

Waarom niet:
<?php
$string = sprintf('dit is %s %s', 'een', 'test');
?>
of ligt dat teveel voor de hand?

Toevoeging op 11/01/2014 00:41:52:

En als je moeilijk wilt doen kan natuurlijk ook nog:
<?php
$string = 'dit is %s %s'; // dit is de begin-string
$string = sprintf($string, '%s', 'test');
$string = sprintf($string, 'een');
?>
maar ik ben er nog niet over uit of ik dit mooi vind...

Reageren