acceder a un elemento de un stdClass usando casting

179 views
Skip to first unread message

Mariano Gomez

unread,
Feb 17, 2011, 5:36:06 PM2/17/11
to php...@googlegroups.com
Hola gente, hace rato q estoy renegando y no le encuentro la vuelta a lo siguiente:
Tengo un objeto del tipo stdClass, y quiero acceder al 1er elemento del mismo haciendo un cast con array. El tema es que quiero hacer todo en la misma linea:

((array) $miVble)[0]
        // $miVble es del tipo stdClass

Pero no hay caso, ese codigo no me funciona. Alguien sabe cual seria la forma correcta de hacerlo, o si hay algun metodo de la clase stdClass para acceder a su i-esimo elemento?

Diego Cañizares

unread,
Feb 17, 2011, 6:01:07 PM2/17/11
to php...@googlegroups.com
2011/2/17 Mariano Gomez <marian...@gmail.com>:

Mmm... las properties de tu objeto son numéricas? Porque en el caso de
que no lo sean, al hacer (array)$miVble te va a estar quedando un
array asociativo.

Por ejemplo, si tenés algo como lo siguiente:

$miVble = new stdClass();
$miVble->Prop = 123;


El dump te va a devolver:

object(stdClass)#1 (1) {
["Prop"]=>
int(123)
}


El dump al castearlo a array:

array(1) {
["Prop"]=>
int(123)
}


Ergo, cuando quieras hacer ((array) $miVble)[0] no te va a devolver
nada... porque simplemente no tiene nada en esa posición del array!

Saludos,

--
Diego G. Cañizares
Software Architect
http://diegocanizares.com.ar

--
Por favor, evite enviarme documentos adjuntos en formato Word, Excel o
PowerPoint.
Lea http://www.gnu.org/philosophy/no-word-attachments.es.html

Diego Cañizares

unread,
Feb 17, 2011, 6:12:25 PM2/17/11
to php...@googlegroups.com
2011/2/17 Mariano Gomez <marian...@gmail.com>:

> Alguien sabe cual seria la
> forma correcta de hacerlo, o si hay algun metodo de la clase stdClass para
> acceder a su i-esimo elemento?
>

Je, me olvidé de esta parte.

Podés hacerte una función que te devuelva el i-ésimo elemento que
quieras... pero sinceramente es un asquete (feo feo).

Algo como:

function getPropertyAt($arrObj, $index) {
$i = 0;
foreach ($arrObj as $value) {
if ($i == $index) { return $value; }
$i++;
}
}

Te devuelve la property en la posición que quieras. Performance? -400
=P Ni hablar en objetos grandes.

En fin, espero haberte ayudado.

Saludos!

Mariano Gomez

unread,
Feb 18, 2011, 1:01:52 PM2/18/11
to php...@googlegroups.com
Diego, las partes del stdClass si son numericas, y lo de la funcion no me convence, pq la idea es acceder a dicho elemento dentro de un if...


--
Has recibido este mensaje porque estás suscrito al grupo "Grupo PHP Argentina" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a php...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a php-arg+u...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/php-arg?hl=es.


Diego Cañizares

unread,
Feb 18, 2011, 2:01:52 PM2/18/11
to php...@googlegroups.com
2011/2/18 Mariano Gomez <marian...@gmail.com>:

> Diego, las partes del stdClass si son numericas, y lo de la funcion no me
> convence, pq la idea es acceder a dicho elemento dentro de un if...
>

Código?

BARBAZUL

unread,
Feb 19, 2011, 11:15:44 AM2/19/11
to php...@googlegroups.com
me suena a que ((array) $miVble)[0] es sintacticamente incorrecto.

Proba con 

$miVble = (array) $miVble;
echo $miVble[0];


--
Has recibido este mensaje porque estás suscrito al grupo "Grupo PHP Argentina" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a php...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a php-arg+u...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/php-arg?hl=es.




--
Matías Montes

Web developer
Reply all
Reply to author
Forward
0 new messages