printf y sprintf son funciones típicas de la librería stdio.h de C. printf quiere decir “print formatted” y sprintf quiere decir “string print formatted”. ¿Para qué se usan?

printf se usa para escribir un texto en la salida estándar (en una consola; en una página web si el programa es un CGI…). sprintf se usa para lo mismo que printf, pero en vez de escribirlo en la salida estándar, lo devuelve como una cadena de caracteres. Hablo más en profundidad sobre printf (y sprintf) en este artículo que publiqué hace un tiempo en Makigas.

sprintf funciona exactamente igual que printf, pero devolviendo una cadena de caracteres con los datos compuestos. ¿A dónde quiero llegar con todo esto? En PHP tenemos también un printf y un sprintf. Y desde que los descubrí, los uso para todo. Funcionan exactamente igual que la concatenación de variables típica de PHP, pero son más elegantes y se mantienen mejor.

Cuando necesitamos imprimir una variable en pantalla junto a más texto, tenemos dos alternativas. La primera es concatenar las cadenas y las variables como un puzzle usando el operador de concatenación. Por ejemplo:

<?php
$dni = $numero_dni . '-' . obtenerLetraDNI($numero_dni);
echo 'Nombre: ' . $nombre . '. Apellidos: ' . $apellidos;
?>

La segunda, es usar printf y scanf. Si las conocéis de C, tardaréis diez segundos en integrarlas a vuestro código. printf puede usarse para enviar a la salida estándar (típicamente a la página web mostrada en el navegador) un texto formateado donde podemos imprimir varias variables. sprintf puede usarse para componer una variable de tipo cadena compuesta con un formato.

El mismo ejemplo anterior puede reescribirse con estas dos funciones.

<?php
$dni = sprintf('%d-%s', $numero_dni, obtenerLetraDNI($numero_dni));
printf('Nombre. %s. Apellidos: %s', $nombre, $apellidos);
?>

Observa como en el ejemplo anterior, la primera línea recibe la letra del DNI como una cadena de caracteres (placeholder %s). Aunque sepamos que se va a imprimir una letra, debemos tener en mente que será una cadena de caracteres, de un caracter. (El placeholder %c funciona igual en PHP que en C, si le hubieramos dicho %c esperaría una variable entera para imprimir su código ASCII).

Placeholders

Los placeholders son esos pequeños códigos que printf y sprintf sustituyen por las variables que se indiquen. Un placeholder comienza con el símbolo de porcentaje y contiene una o varias letras que indican el formato. La manera más simple es indicar únicamente el tipo de variable esperada. Por ejemplo, %c para imprimir un código ASCII, %d para imprimir un numero entero, %f para imprimir un número flotante y %s para imprimir una cadena.

Una lista completa de placeholders y usos más complejos pueden encontrarse en la documentación que hay en la web de PHP.