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

PHP OO Problema al empezar con POO : No error pero no hace nada

Estas en el tema de Problema al empezar con POO : No error pero no hace nada en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola a todos Continuando con mi aprendizaje de php estoy empezando con POO. Por ahora me resulta francamente raro, pero poco a poco. He hecho ...
  #1 (permalink)  
Antiguo 06/01/2013, 06:29
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 11 años, 4 meses
Puntos: 3
Problema al empezar con POO : No error pero no hace nada

Hola a todos

Continuando con mi aprendizaje de php estoy empezando con POO.

Por ahora me resulta francamente raro, pero poco a poco.

He hecho una variación de un ejercicio propuesto y he conseguido que no dé mensajes de error pero ... tampoco hace nada

Os pongo el codigo a ver si alguien es tan amable de decirme qué error he cometido, estaría muy agradecido.

Código PHP:
<html>
<head>
<title>Atributos de una clase</title>
</head>
<body>
<?php
class Menu 
{
  private 
$enlaces=array();
  private 
$titulos=array();
  private 
$modo;
  public function 
cargarOpcion($en,$tit)
  {
    
$this->enlaces[]=$en;
    
$this->titulos[]=$tit;
  }
  public function 
mostrar($modo)
  {
    switch (
$this->modo
    {
      case 
"horizontal":
        for(
$f=0;$f<count($this->enlaces);$f++)
          {
           echo 
'<a href="'.$this->enlaces[$f].'">'.$this->titulos[$f].'</a>';
           echo 
"-";
          }
           break;
      case 
"vertical":
         for(
$f=0;$f<count($this->enlaces);$f++)
          {
           echo 
'<a href="'.$this->enlaces[$f].'">'.$this->titulos[$f].'</a>';
           echo 
"<br>";
          }
           break;
    }
  }
}

$menu1=new Menu();
$menu1->cargarOpcion('http://www.google.com','Google');
$menu1->cargarOpcion('http://www.yahoo.com','Yahoo');
$menu1->cargarOpcion('http://www.msn.com','MSN');
/*$menu1->mostrar("horizontal");*/ Comentada para que se ejecute la otra forma
$menu1
->mostrar("vertical");

?>
</body>
</html>
Muchas gracias
  #2 (permalink)  
Antiguo 06/01/2013, 06:49
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 8 meses
Puntos: 181
Respuesta: Problema al empezar con POO : No error pero no hace nada

Asi a primer vistazo no le vi error. De pronto el error se deba a como usas las comillas dobles y sencillas.

De como lo tienes

Código PHP:
echo '<a href="'.$this->enlaces[$f].'">'.$this->titulos[$f].'</a>'
Yo intentaria cambiarlo a esto

Código PHP:
echo "<a href='".$this->enlaces[$f]."'>".$this->titulos[$f]."</a>"
Creo que con eso se deberia solucionar tu problema o por lo menos que te bote algun error

Igual como veo que lo estas sacando de la pagina de php ya (jaja reconozco el ejemplo, creo que muchos aprendimos con esa pagina) ellos al final tienen la manera como resuelven el ejercicio y quizas puedas ver en que te has equivocado.
__________________
Blog de humor http://elcuasatar.net63.net/

Última edición por cuasatar; 06/01/2013 a las 06:59
  #3 (permalink)  
Antiguo 06/01/2013, 07:16
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 11 años, 4 meses
Puntos: 3
Respuesta: Problema al empezar con POO : No error pero no hace nada

Muchas gracias cuasatar por contestarme.

He intentado el cambio de comillas que me sugieres, pero el resultado es el mismo.

He modificado un poco el codigo poniendo un echo al comienzo de la funcion (o metodo) mostrar para que presente el valor del argumento. El valor que presenta es nulo, el argumento está, aparentemente, vacio

Código PHP:
 public function mostrar($modo)
  {
    echo 
"Presentación : " $this->modo;
    switch (
$this->modo
    {
      case 
"horizontal"
Creo que hago algo mal al pasar la variable $modo a la funcion mostrar.

Pero no llego a ver qué hago mal

*

Efectivamente estoy siguiendo el curso de php ya, me gusta y creo que el tener ejercicios propuestos y resolverlos, hace que vayas aprendiendo mucho. La solución que dan a este ejercicio es distinta y la entiendo. Lo que no entiendo es por qué no funciona la versión que yo hice, mi solución al programa propuesto, jaja ... y en ello estoy.

Muchas gracias
  #4 (permalink)  
Antiguo 06/01/2013, 07:30
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 8 meses
Puntos: 181
Respuesta: Problema al empezar con POO : No error pero no hace nada

Uhm creo que acabo de darme cuenta de tu error. en primer lugar si conservaria la forma como te sugeri las comillas, me parece que es mejor (mas que todo por orden y evitar que las interprete mal php aunque en teoria ambas formas deberian valer)

En segundo lugar estas llamando a la variable $modo de la forma $this->modo pero en ningun momento has definido el argumento modo al comienzo de la clase.

Soluciones:

1. En lugar de llamar a $this->modo usa simple y llanamente $modo
2. Otra forma de hacerlo es definir un argumento llamado modo al comienzo de la clase y luego le asignas valor de la forma:

$this->modo=$modo;

3. Repasa esa parte de asignación de argumentos para que sepas como usarlo.

Creo que con eso ahora si se solucionaria tu error.
__________________
Blog de humor http://elcuasatar.net63.net/

Última edición por cuasatar; 06/01/2013 a las 07:37
  #5 (permalink)  
Antiguo 06/01/2013, 07:42
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 11 años, 4 meses
Puntos: 3
Respuesta: Problema al empezar con POO : No error pero no hace nada

De nuevo muchas gracias por responderme.

El argumento modo lo defino al comienzo de la clase :

class Menu
{
private $enlaces=array();
private $titulos=array();
private $modo;

No sé si lo hago de forma correcta. Desde luego no me funciona, jaja, así que algo hago mal.

Pero sigo sin saber qué.

He dejado las comillas como me has comentado, me gustan más así.

Y gracias

*

Efectivamente utilizando $modo funciona.

Pero pensaba que para usar una Clase había que utilizar siempre el this->

En fin, poco a poco
  #6 (permalink)  
Antiguo 06/01/2013, 07:49
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 8 meses
Puntos: 181
Respuesta: Problema al empezar con POO : No error pero no hace nada

Ya hiciste lo que te dije?

Código PHP:
$this->modo=$modo
De esa manera ya podrias usar $this->modo en toda la clase.

$this->modo y $modo no son iguales $modo es simple y llanamente una variable de entrada del método mostrar.

El argumento modo es propio de la clase menu y por el simple hecho de llamarlas igual no significa que esta tomara el valor por obra y gracia del espíritu santo.

Con la asignación el argumento modo de la variable menu ya deberia tener el valor que deseas.

No se si me he liado mucho explicando pero modifica el codigo a ver si has logrado entender el concepto.

Si te confunde un poco yo cambiaria el argumento del metodo por otro nombre como $posicion y haria

Código PHP:
$this->modo=$posicion
Eso mas que nada para no equivocarse y creer que ambos son iguales.
__________________
Blog de humor http://elcuasatar.net63.net/
  #7 (permalink)  
Antiguo 06/01/2013, 07:57
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 11 años, 4 meses
Puntos: 3
Respuesta: Problema al empezar con POO : No error pero no hace nada

Muchas gracias, efectivamente me faltaba eso, dar valor a la variable/propiedad de la clase

Mala costumbre utilizar el mismo nombre para las dos variables. Lo había leido pero ... no lo había hecho

Me faltaba :

public function mostrar($mod)
{
$this->modo=$mod;

Ya funciona estupendamente

Muchas gracias por la ayuda cuasatar

Etiquetas: empezar, html, nada, php, poo
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 01:48.