> Faqs > Cómo acceder a propiedades de objetos PHP que tienen nombres numéricos

Cómo acceder a propiedades de objetos PHP que tienen nombres numéricos

Voy a hacer una pregunta que quizás resulte básica para muchos de vosotros, pero que me parece un caso extraño y que me gustaría saber cómo resolver en PHP.

Tengo un objeto, que por motivos de su construcción tiene propiedades con nombres numéricos. Ya sé que no es muy buena práctica ponerle nombres con cifras en las propiedades de los objetos, pero en este caso me vienen así porque el objeto se construye a través de los datos que vienen de una base de datos.

En la base de datos hay una columna que se llama 1_1 y 1_2 y al crearse el objeto automáticamente le asigna las propiedades con esos nombres de columna.

PHP no me deja acceder a un objeto a través de ese valor numérico:

echo $item->1_1; //

Eso no se puede y PHP me muestra el siguiente error:

<b>Parse error</b>:  syntax error, unexpected integer &quot;1_1&quot;, expecting identifier or variable or &quot;{&quot; or &quot;$&quot; in <b>[...][...]</b> on line <b>6</b><br />

En resumen la pregunta sería ¿Cómo acceder a estas propiedades que tienen nombres numéricos con PHP?

Respuestas

Es verdad, no resulta como que muy buena práctica tener nombres de propiedades numéricos, pero a veces no hay más remedio. Te puede venir por la base de datos, o también por un JSON que estés convirtiendo a objeto PHP.

No hay problema, porque puedes usar la notación de las llaves para solucionar este caso, colocando la cadena a la que quieres acceder entre llaves y comillas.

<?php
$item = json_decode('{"ano": 2023, "1_1": 55, "1_2": 99}');
echo $item->{'1_1'};

Otra opción que me gusta menos pero que también podrías hacer es colocar el nombre de la propiedad en una variable. Entonces accedes a la propiedad usando esa variable, de esta forma.

<?php
$item = json_decode('{"ano": 2023, "1_1": 55, "1_2": 99}');
$prop = '1_2';
echo $item->$prop;

Las dos maneras serían correctas en PHP, aunque creo que la primera es mucho más limpia y te dispensa hacer una variable que realmente no quieres para nada más que para acceder a la propiedad del objeto.

Juanjo
243 8 18 5
Me ha servido de mucha ayuda. Muy completa la respuesta!