printf sprintf vprintf svprintf WTF!?!

Es ist viel einfacher als es sich anhört

    Inhaltsangabe
  1. Das Problem
    1. Problem Beispiel
  2. Die Lösung
    1. Ein Lösungsbeispiel
  3. Wo liegen die Unterschiede?
    1. Mit s und ohne s
    2. sprintf und svprintf
  4. Fazit

Ich arbeite aktuell sehr stark an der Übersetzungsmöglichkeit meines Islam Archiv Projektes. Jetzt war ich mit einem Problem konfrontiert, was eine sehr interessante Sache ist aber nicht unbedingt direkt schlüssig ist.

Das Problem

Meine Übersetzungen sind als Zeichenketten gespeichert und jetzt sollte der Benutzer eine E-Mail erhalten, sobald er sich erfolgreich registriert hat. Wie lässt man aber in php diese Zeichenkette Variabel ausgeben?

Problem Beispiel

Es soll in der Mail zum Beispiel stehen: Sie haben sich erfolgreich registriert. Bitte melden Sie sich mit der E-Mail Adresse deinemail@mailprovider.de an.

Wenn das meine Zeichenkette ist, wie setze ich dann die E-Mail Adresse ein?

Die Lösung

Hierzu bietet php eine einfache Lösung. Es gibt die integrierten Funktionen:

  • printf(string, var1, var2, var3,… )
  • sprintf(string, var1, var2, var3,… )
  • vprintf(string, array)
  • svprintf(string, array)

Ich kam erst total durcheinander was das überhaupt bedeuten soll aber kam auch sehr schnell zu einer Lösung.

Alle Funktionen machen die selbe Aufgabe. Sie nehmen einen String und durchsuchen diesen nach Platzhaltern. Werden diese Platzhalter gefunden, werden diese mit den in den nachfolgenden Argumenten übergeben Variablen ersetzt.

Ein Lösungsbeispiel

$email_text = 'You have successfully registered with the email address %s. Please click <a href=\"%s\">here</a> to activate your account.';

$mail = sprintf(
	$translations->login_register->registered_mail,
	'info@talhasariyuerek.com',
	'https://www.talhasariyuerek.com/activate/da39a3ee5e6b4b0d3255bfef95601890afd80709'
);

/*
Ergebnis:
You have successfully registered with the email address info@talhasariyuerek.com. Please click <a href="https://www.talhasariyuerek.com/activate/da39a3ee5e6b4b0d3255bfef95601890afd80709">here</a> to activate your account.
*/

Wo liegen die Unterschiede?

Mit s und ohne s

Ihr habt bestimmt bereits gemerkt, dass es einmal die Funktion selber gibt und einmal die Variante mit dem Buchstaben „s“ davor. Dieser Buchstabe steht einfach nur für silent. Wenn man die Funktionen printf oder vprintf benutzt, wird das Ergebnis direkt ausgegeben. Wenn man jedoch die Funktion sprintf oder svprintf benutzt, wird das Ergebnis in zurück gegeben und man kann die Variable in einer anderen Funktion verwenden.

sprintf und svprintf

Diese beiden Funktionen haben auch kennen gravierenden Unterschied. Das einzige ist dass man bei sprintf alle Zeichenketten als Argumente übergibt und bei vsprintf alle Zeichenketten einfach in einen Array packt.

Je nachdem in was für einem Format man die Zeichenketten vorliegen hat, kann man die entsprechende Funktion anwenden.

Fazit

Ich habe jetzt schon sehr viel nutzen in diesen Funktionen gesehen und verwende diese. Das ist auch nicht kompliziert und ich bin dankbar, dass die php community diese Funktionen eingebaut hat. Ich hoffe dass ich euch mit diesem Beitrag geholfen habe und wenn ihr doch noch Fragen habt, könnt ihr diese gerne an mich über die E-Mail Adresse info@talhasariyuerek.com zukommen lassen. Ich werde diese dann so schnell wie möglich beantworten.

Themen

php Programmieren Technik

Beitrag teilen

WhatsAppen

Folgen Sie uns