2009-11-04 7 views
8

he convertido una serie de oponerse datos de la siguiente manera:PHP en referencia al objeto de datos con clave numérica

<?php 
$myobject->data = (object)Array('zero','one','two'); 
print_r($myobject); 
?> 

y la salida es:

stdClass Object ([data] => stdClass Object ([0] => zero [1] => one [2] => two))

Hasta aquí todo bien. Pero si trato de referirme a las teclas numéricas ...

<?php 
$myobject->data = (object)Array('zero','one','two'); 
$counter = 1; 
echo $myobject->data->$counter; 
?> 

... nada se devuelve! Esperaría que hiciera eco de "uno".

¿Lo estoy haciendo mal?

Respuesta

15

Eso es una rareza en PHP, necesita acceder utilizando $object->data->{1}. O puede convertirlo a una matriz para acceder a los miembros. Pero creo que lo mejor es tener nombres propios para miembros de objetos, intentar algo como esto, por ejemplo:

$myobject->data = (object)Array('m0' => 'zero','m1' => 'one','m2' => 'two'); 
$myObject->data->m1; 
1

Puede intentar acceder a él como un elemento de matriz. Pero no estoy seguro de si eso funcionaría o no. Sin embargo, lo que puede hacer es recorrer los elementos del objeto (o más bien, las propiedades) utilizando un bucle foreach.

así:

foreach ($myobject->data as $key => $value) 
    echo "$key is my key.<br />"; 

no sólo estoy seguro de si se puede acceder a la clave, también.

+0

¿Has probado esto? Me interesaría saber si funciona. De lo contrario, solo usa la solución de soulmerge. – Franz

-3
echo $myobject->data[$counter]; 

Si no me equivoco.

+0

Error fatal: no se puede usar el objeto de tipo stdClass como matriz –

+2

. Siempre que la clase no implemente ArrayAccess, no se puede acceder de esta manera: http://de2.php.net/manual/de/class.arrayaccess .php – Boldewyn

1

El problema que tiene es que $counter se convierte automáticamente en cadena para la consulta. Pruebe

$myobject->$counter = "abc"; 
var_dump($myobject); 

y verá lo que quiero decir. Para eludir este uso, el método propuesto por Franz.

Cuestiones relacionadas