php

No concatenes cadenas, usa printf o sprintf en PHP

Una de las cosas más comunes que hacemos como desarrolladores es concatenar cadenas. El operador para concatenar cadenas en PHP es el punto. Concatenamos dos cadenas así:

$saludo = "hola" . " mundo";

Pero la cosa se complica cuando quieres concatenar varias cosas de distintos tipos, o concatenar resultados de llamar a funciones. Es por ello que hoy explicaré una alternativa a concatenar en PHP, y me refiero a las funciones printf y sprintf.

Nota: para el generador de código de CodeIgniter utilicé mucho la función sprintf.

La teoría

Estas dos funciones que veremos sirven para muchísimas cosas, pero aquí únicamente te explicaré a usarlas y cómo te ayudarán a mejorar (en algunas ocasiones) tu código. Funcionan exactamente que en C.

Lo que hace printf y sprintf es formatear una cadena con “placeholders”. La diferencia entre printf y sprintf es que printf imprime directamente el mensaje formateado, mientras que sprintf regresa una cadena que incluye el mensaje formateado.

La práctica: cómo usar printf

Vamos a ver algunas comparaciones entre usar echo concatenando cadenas o usar printf.

Para mandar un mensaje con variables puedes escribir esto:

printf("Hola %s tu edad es %d", $nombre, $edad);

En lugar de esto:

echo "hola $nombre tu edad es $edad";

Vas a agradecerlo cuando llames a funciones. Veamos este otro ejemplo en donde se imprime el resultado de llamar a dos funciones:

<?php
// Funciones "ficticias" para demostrar
function obtenerNombre(){
 return "parzibyte";
}
function obtenerEdad(){
 return 21;
}

echo "Hola " . obtenerNombre() . " tu edad es " . obtenerEdad();

Claro que podrías almacenar el resultado de la llamada en variables separadas, pero el punto aquí era hacerlo de manera corta. Ahora veamos el equivalente con sprintf:

<?php
// Funciones "ficticias" para demostrar
function obtenerNombre(){
 return "parzibyte";
}
function obtenerEdad(){
 return 21;
}
printf("Hola %s tu edad es %d", obtenerNombre(), obtenerEdad());

De hecho, desde que uno lee la cadena del formato sabe lo que se va a imprimir al final. Recuerda que estamos haciéndolo con ejemplos simples, aunque en la vida real a menudo vas a encontrar algunos realmente complejos.

Las comillas y echo

Otro problema que printf resuelve es cuando queremos imprimir y encerrar algo entre comillas. Tal vez no sea muy común lo que veremos a continuación, aunque de igual manera vamos a ver este ejemplo en donde no podemos usar comillas simples pero tenemos que concatenar un mensaje:

<?php
// Funciones "ficticias" para demostrar
function obtenerNombre(){
 return "parzibyte";
}
function obtenerEdad(){
 return 21;
}
echo 'Hola "' . obtenerNombre() . '" tu edad es "' . obtenerEdad() . '"';

En este caso se muestran los datos encerrados entre comillas. En ocasiones se necesita eso, cosa que realmente se complica con más variables. Con printf sería distinto:

<?php
// Funciones "ficticias" para demostrar
function obtenerNombre(){
 return "parzibyte";
}
function obtenerEdad(){
 return 21;
}
printf('Hola "%s" tu edad es "%d"', obtenerNombre(), obtenerEdad());

Así podría mostrar ejemplos, pero en resumen, printf es mejor que concatenar y usar echo en algunas ocasiones.

Un buen uso de printf

No creo que en la actualidad sea bueno usar PHP puro para mostrar HTML pero viene de maravilla cuando, por ejemplo, queremos renderizar un enlace que le envíe un correo a alguien. Normalmente sería así:

<?php
$correo = "contacto@parzibyte.me";
echo '<a href="mailto:' . $correo . '">Puedes contactarme en: ' . $correo . '</a>';

Con printf queda más expresivo:

#<?php
$correo = "contacto@parzibyte.me";
printf('<a href="mailto:%1$s">Puedes contactarme en: %1$s</a>', $correo);

Además de que nos evita poner la variable dos veces. En ese ejemplo usamos la numeración de argumentos en %1$s que se separa en:

  • %: signo de porcentaje, siempre va al inicio
  • 1$: el número de argumento que pasamos a printf
  • s: el formato, en este caso s es string, d es entero.

Puedes leer más en la documentación oficial.

PHP y sprintf

Como lo dije, la diferencia entre printf y sprintf es que sprintf devuelve el resultado en lugar de imprimirlo en el flujo de salida. Así:

<?php
$correo = "contacto@parzibyte.me";
$htmlRenderizado = sprintf('<a href="mailto:%1$s">Puedes contactarme en: %1$s</a>', $correo);
echo "Aquí tengo el HTML: " . $htmlRenderizado;

Con esto podríamos obtener el mensaje formateado para guardarlo en una base de datos, concatenarlo con otros componentes y cosas de esas.

Conclusión

En ningún momento digo que esto debe usarse siempre, solamente estoy haciendo un pequeño análisis de cómo printf viene mejor en algunas ocasiones en donde echo no.

Todo dependerá de las situaciones a las que te enfrentes, pero siempre es bueno conocer alternativas.

Te invito a leer más sobre PHP aquí.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.