Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Indexación con Objetos

Estas en el tema de Indexación con Objetos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola amigos del web, les traigo unas preguntas que me ha atormentado estos últimos días. Ya que apenas estoy explorando este mundo de la POO ...
  #1 (permalink)  
Antiguo 24/09/2007, 20:14
 
Fecha de Ingreso: noviembre-2006
Mensajes: 49
Antigüedad: 17 años, 5 meses
Puntos: 0
Indexación con Objetos

Hola amigos del web, les traigo unas preguntas que me ha atormentado estos últimos días. Ya que apenas estoy explorando este mundo de la POO me he dado cuenta que muchas de las cosas que hacia antes con dificultad ahora se hacen más facil con objetos, pero aun hay un asunto que no he podido conciliar: la indexación.

Con programación estructurada, indexar la información era muy facil proque uno contaba con los siempre todo poderosos Arrays donde podia almacenar ordenadamente grandes cantidades de información, pero ahora con objetos, que todos los elemntos de indexan mediante una variable inicializada no me cabe en la cabeza una manera organizada de controlar un número indeterminado de elementos.

He esuchado que uno puede meter objetos en arrays, pero tengo entendido que es un poco complejo y estoy seguro que ustedes deben tener un método más elegante de manejar cantidades indetemrinadas de objetos.

otra cosa que aprovecho para preguntar, hay manera de acceder a un objeto teniendo el nombre en una variable? me explico con un ejemplo

Código PHP:
<?php
//tengo tres variables de tipo texto,  $perro1,  $perro2,  $perro3
for($i=1;$i<4;$i++)
{
     echo (
$_GLOBALS["perro".$i]);
}
?>
con variables sencillas, uno las puede referenciar con $_GLOBALS pero no creo que uno pueda hacer lo mismo con objetos.

Bueno, ahí mis dudas, les agradezco de adelantado la ayuda ;)
  #2 (permalink)  
Antiguo 25/09/2007, 07:55
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Indexación con Objetos

Los arrays tambien existen en la POO, son una caracteristica del lenguaje y no veo razon por las que no las quieras utilizar, para manejar los objetos puedes hacerlo asi:
Código PHP:
$objarray = array();
$objarray[] = $unObjeto;
$objarray[] = $otroObjeto;
// etc.

// Luego puedes ciclar los objetos de una forma elegante:
foreach( $objarray as $perro ) {
       
$perro->ladra();

Puedes acceder al objeto teniendo su nombre por decir:
Código PHP:
$perro = new Perro();
$obj "perro";
$
$obj->ladra(); 
Saludos.
  #3 (permalink)  
Antiguo 25/09/2007, 09:30
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
Re: Indexación con Objetos

Hola También puedes usar Colecciones de objetos que vienen en el motor de PHP5 tales como SplObjectStorage
y ArrayObject
las cuales implementan interfaces tales como ArrayAccess,I teratorAggregate, countable etc...

Más Info sobre SPL (Standard PHP Library), http://www.php.net/~helly/php/ext/spl/ y un excelente Artículo de Zend Devzone
Aquí tienes un ejemplo de SplObjectStorage:
Código PHP:
<?php

/**
 *  Test class that we will store in the
 *  SplObjectStorage object.
 */
class StorageTest {
    private 
$title;
    
    public function 
__construct$title ) {
        
$this->title $title;
    }
    
    public function 
__toString() {
        return 
$this->title;
    }
}

$storage = new SplObjectStorage();
$obj1 = new StorageTest"wiki.cc" );
$obj2 = new StorageTest"wiki2.cc" );
$storage->attach$obj1 );
$storage->attach$obj2 );

foreach( 
$storage as $obj ) {
    echo 
$obj "\n";
}

if( 
$storage->contains$obj1 ) ) {
    echo 
"storage contains the object\n";
} else {
    echo 
"storage does NOT contain the object\n";
}
$storage->detach$obj1 );
if( 
$storage->contains$obj1 ) ) {
    echo 
"storage contains the object\n";
} else {
    echo 
"storage does NOT contain the object\n";
}
?>
salu2

Última edición por zsamer; 25/09/2007 a las 12:01
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:05.