stdClass en PHP

Supongamos que queremos abstraer un conjunto de datos en PHP en una estructura. PHP, a diferencia de otros lenguajes de programación, no tiene una estructura nativa como el struct de C o el record de Delphi o Pascal.

Mucha gente usa los los arrays asociativos, que en realidad en este lenguaje de programación son mapas. Eso significa que si tuvieramos que guardar una serie de variables en PHP podríamos construir un array con esos valores y trabajar con él.

<?php
function crear_persona($nombre, $apellidos, $dni)
{
    $persona = [
        'nombre' => $nombre,
        'apellidos' => $apellidos,
        'dni' => $dni
    ];
    return $persona;
}

$persona = crear_persona('John', 'Doe', '1234567890F');
echo '¡Hola ' . $persona['nombre']  . '!';

Hay otra forma más elegante de hacer esto, que es creando clases. No obstante, tal vez algunos consideren demasiado exagerado crear una clase simplemente para almacenar tres valores, especialmente si es un sistema grande y la clase sólo la van a usar para cuatro cosas y ya está. Para solucionar estas pequeña molestias, existe una clase especial en PHP que se llama stdClass.

La clase stdClass es una clase vacía que no tiene ni atributos ni métodos. Los atributos los podemos añadir nosotros mismos a posteriori tras crear una instancia de esta enigmática a la vez que maravillosa clase. Por ejemplo, el código anterior podría reescribirse con clases de tipo stdClass como sigue:

<?php
function crear_persona($nombre, $apellidos, $dni)
{
    $persona = new stdClass;
    $persona->nombre = $nombre;
    $persona->apellidos = $apellidos;
    $persona->dni = $dni;
    return $persona;
}

$persona = crear_persona('John', 'Doe', '1234567890F');
echo '¡Hola ' . $persona->nombre . '!';

stdClass es super cómoda de usar para pequeñas estructuras de datos que en otros lenguajes de programación crearíamos con registros, como un struct de C. Hasta ahora siempre he usado el método de los arrays para guardar cualquier tipo de estructuras, pero desde que he descubierto stdClass, intento usarlo siempre que puedo en lugar de los arrays para guardar un conjunto de valores. Es una forma que a mi parecer es mucho más limpia que los array.