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

Agenda mediante una clase con array

Estas en el tema de Agenda mediante una clase con array en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas!!! Tengo un problema estoy haciendo un curso de php y en uno de los ejercicios me piden que realice una agenda con dos clases. ...
  #1 (permalink)  
Antiguo 29/06/2010, 09:44
 
Fecha de Ingreso: junio-2010
Mensajes: 3
Antigüedad: 13 años, 9 meses
Puntos: 0
Agenda mediante una clase con array

Buenas!!!
Tengo un problema estoy haciendo un curso de php y en uno de los ejercicios me piden que realice una agenda con dos clases. Una clase llamada persona con los datos de cada registro, y una clase llamada agenda con la variable contactos, siendo esta última un array de persona.
La cuestión es que luego en la página principal se pide que se muestre los tres primeros datos de los tres primeros registros de la agenda.
Para ello yo he realizado una tabla, pero tengo que tener algo mal escrito o me debe de faltar algo, porque no se llega a imprimir en la página.
Aquí os paso el código que tengo realizado por si veis algo mal. De todas formas si se os ocurre lo que pueda ser aunque no se relacione con el código escrito os agradecería las ideas.

<?php
$a = new agenda()
?>
<table width="200" border="1">
<tr>
<th scope="col"><h1>Nombre</h1></th>
<th scope="col"><h1>Apellidos</h1></th>
<th scope="col"><h1>Teléfono</h1></th>
</tr>
<?php
include_once("agenda.inc.php")
foreach ($contactos)
{
echo "<tr>";
echo "<td>$nombre</td>";
echo "<td>$apellidos</td>";
echo "<td>$telefono</td>";
echo "</tr>";
}
?>
</table>

Creo que el gran problema es en el bucle, pero es que ya estoy hecha un lio con todo lo que probe.
Espero que podais ayudarme.
Gracias.
  #2 (permalink)  
Antiguo 29/06/2010, 11:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Agenda mediante una clase con array

De donde obtienes la variable $contactos? Si estas llamandola desde tu clase agenda debes de tener algún método como $contactos = $a->getContactos() o algo por el estilo.

Saludos.
  #3 (permalink)  
Antiguo 29/06/2010, 11:19
 
Fecha de Ingreso: junio-2010
Mensajes: 3
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Agenda mediante una clase con array

Buenas!!
la variable $contactos sale del siguiente código de la clase

<?php
include_once("persona.inc.php");
class agenda
{
private $contactos = array();
function __construct()
{
$this->contactos[0] =new Persona("Juan", "Pérez", 666666666, "[email protected]", "direccion 1", "malaga", "malaga", "españa", 29000, "01/01/0000");
$this->contactos[1] =new Persona("Gema", "Soldado", 689478426, "[email protected]", "salvatierra 3", "Valencia", "Valencia", "España", 15630, "05/09/1975");
$this->contactos[2] =new Persona("Andrés", "Rio", 675984123, "[email protected]", "alatriste 5", "Granada", "Granada", "España", 18000, "03/07/1986");
}
public function getPersona(indice)
{
$this->indice = $i
}
}
?>

¿sirve de algo??
  #4 (permalink)  
Antiguo 29/06/2010, 11:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Agenda mediante una clase con array

Si la variable es privada tienes que crear un método getContactos() que te devuelva esa variable, algo así:
Código PHP:
Ver original
  1. public function getContactos() {
  2.      return $this->contactos;
  3. }

Para que puedas ver la variable fuera de la clase.

Saludos.
  #5 (permalink)  
Antiguo 29/06/2010, 11:29
Avatar de maturano  
Fecha de Ingreso: enero-2010
Ubicación: /home/
Mensajes: 537
Antigüedad: 14 años, 3 meses
Puntos: 36
Respuesta: Agenda mediante una clase con array

El código que muestras es la definición de la clase pero en ningún momento estás asignando algo a una variables $contactos que utilizas posteriormente. Como dijo GatorV, debes tener algo como:
Código PHP:
Ver original
  1. $contactos = $agenda->getContactos();
Donde $agenda sería una instancia de la clase que dejas y el método getContactos() --que ahora no tienes-- debería regresar el array donde internamente almacenas las personas.

Por otra parte, el array es de objetos, por lo que igual debes acceder a sus propiedades mediante métodos (a menos claro, que hagas la asignación a variables; un poco sin sentido). Esto es, en tu bucle deberías tener algo como:
Código PHP:
Ver original
  1. foreach ($contactos as $persona) {
  2.     echo $persona->getNombre(); // O, no recomendado, $persona->nombre
  3.     echo $persona->getApellidos();
  4.     // etc ...
  5. }

Por último, verás la sintaxis de tu foreach es errónea y, pareciera en tu código inicial primero intentas instanciar la clase antes de incluirla. Raro que esto no te haya dado errores de ejecución.
__________________
I ♥ The Music!
  #6 (permalink)  
Antiguo 30/06/2010, 02:34
 
Fecha de Ingreso: junio-2010
Mensajes: 3
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Agenda mediante una clase con array

Buenas!! gracias por las respuestas, ya he conseguido que me salga algo pero sin llegar a utilizar el bucle, ahora el problema que tengo es cómo pasar las propiedades del objeto persona que selecciono en el link.
Os dejo los distintos códigos que tengo en las páginas para que sepais como lo tengo.
Página persona:
Código PHP:
Ver original
  1. <body>
  2. <?php
  3. class Persona
  4. {
  5.     private $nombre;
  6.     private $apellidos;
  7.     private $telefono;
  8.     private $email;
  9.     private $direccion;
  10.     private $ciudad;
  11.     private $provincia;
  12.     private $pais;
  13.     private $codigoPostal;
  14.     private $fechaNacimiento;
  15.    
  16.     public function __construct($nombre, $apellidos, $telefono, $email, $direccion, $ciudad, $provincia, $pais, $codigoPostal, $fechaNacimiento)
  17.     {
  18.         $this->nombre = $nombre;
  19.         $this->apellidos = $apellidos;
  20.         $this->telefono = $telefono;
  21.         $this->email = $email;
  22.         $this->direccion = $direccion;
  23.         $this->ciudad = $ciudad;
  24.         $this->provincia = $provincia;
  25.         $this->pais = $pais;
  26.         $this->codigoPostal = $codigoPostal;
  27.         $this->fechaNacimiento = $fechaNacimiento;
  28.     }
  29.    
  30.     public function getNombre()
  31.     {
  32.         return $this->nombre;
  33.     }
  34.     public function getApellidos()
  35.     {
  36.         return $this->apellidos;
  37.     }
  38.     public function getTelefono()
  39.     {
  40.         return $this->telefono;
  41.     }
  42.     public function getEmail()
  43.     {
  44.         return $this->email;
  45.     }
  46.     public function getDireccion()
  47.     {
  48.         return $this->direccion;
  49.     }
  50.     public function getCiudad()
  51.     {
  52.         return $this->ciudad;
  53.     }
  54.     public function getProvincia()
  55.     {
  56.         return $this->provincia;
  57.     }
  58.     public function getPais()
  59.     {
  60.         return $this->pais;
  61.     }
  62.     public function getCodigoPostal()
  63.     {
  64.         return $this->codigoPostal;
  65.     }
  66.     public function getFechaNacimiento()
  67.     {
  68.         return $this->fechaNacimiento;
  69.     }
  70. }
  71. $posicion = $_GET["posicion"];
  72. switch ($posicion)
  73. {
  74.     case "0":
  75.         echo $indice;
  76.         break;
  77.     case "1":
  78.         $contactos[1];
  79.         break;
  80. }
  81.        
  82. ?>
  83. </body>
Página agenda:
Código PHP:
Ver original
  1. <body>
  2. <?php
  3. include_once("persona.inc.php");
  4. class agenda
  5. {
  6.     private $contactos = array();
  7.     function __construct()
  8.     {
  9.         $this->contactos[0] =new Persona("Juan", "Pérez", 666666666, "[email protected]", "direccion 1", "malaga", "malaga", "españa", 29000, "01/01/0000");
  10.         $this->contactos[1] =new Persona("Gema", "Soldado", 689478426, "[email protected]", "salvatierra 3", "Valencia", "Valencia", "España", 15630, "05/09/1975");
  11.         $this->contactos[2] =new Persona("Andrés", "Rio", 675984123, "[email protected]", "alatriste 5", "Granada", "Granada", "España", 18000, "03/07/1986");
  12.     }
  13.     public function getContactos()
  14.     {
  15.         return $this->contactos;
  16.     }
  17.     public function getPersona($indice)
  18.     {
  19.     return $this->contactos[$indice];
  20.     }
  21.     public function getIndice()
  22.     {
  23.         return $this->indice;
  24.     }
  25. }
  26.  
  27. ?>
  28. </body>
Página index:
Código PHP:
Ver original
  1. <body>
  2. <?php
  3.     include_once("agenda.inc.php")
  4. ?>
  5.    
  6. <table width="200" border="1">
  7. <?php
  8.     $agenda =new agenda()
  9. ?>
  10.   <tr>
  11.     <th scope="col"><h1>Nombre</h1></th>
  12.     <th scope="col"><h1>Apellidos</h1></th>
  13.     <th scope="col"><h1>Teléfono</h1></th>
  14.     <th scope="col"><h1>Detalles</h1></th>
  15.   </tr>
  16.   <tr>
  17.     <td><?php echo $agenda->getPersona(0)->getNombre(); ?></td>
  18.     <td><?php echo $agenda->getPersona(0)->getApellidos(); ?></td>
  19.     <td><?php echo $agenda->getPersona(0)->getTelefono(); ?></td>
  20.     <td><?php echo "<a href='persona.inc.php?posicion=0'>Ver</a>"; ?></td>
  21.   </tr>
  22.   <tr>
  23.     <td><?php echo $agenda->getPersona(1)->getNombre(); ?></td>
  24.     <td><?php echo $agenda->getPersona(1)->getApellidos(); ?></td>
  25.     <td><?php echo $agenda->getPersona(1)->getTelefono(); ?></td>
  26.     <td><?php echo "Ver"; ?></td>
  27.   </tr>
  28.   <tr>
  29.     <td><?php echo $agenda->getPersona(2)->getNombre(); ?></td>
  30.     <td><?php echo $agenda->getPersona(2)->getApellidos(); ?></td>
  31.     <td><?php echo $agenda->getPersona(2)->getTelefono(); ?></td>
  32.     <td><?php echo "Ver"; ?></td>
  33.   </tr>
  34.  
  35. </table>
  36.  
  37. </body>
Gracias por todo.
  #7 (permalink)  
Antiguo 30/06/2010, 09:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Agenda mediante una clase con array

No es necesario que tengas <body> en tus scripts con clases, y aparte corrompe tu salida HTML, deja solo puro código PHP en tus scripts y no tendras problema.

Por otro lado para el bucle solo es algo sencillo:
Código PHP:
Ver original
  1. foreach ($agenda->getContactos as $persona) {
  2.         echo $persona->getNombre();
  3. }

Saludos.

Etiquetas: agenda, clase
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 19:02.