PHP - Duda herencia objetos php

 
Vista:
sin imagen de perfil
Val: 33
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Duda herencia objetos php

Publicado por Fulgencio (20 intervenciones) el 16/03/2020 13:50:20
Tengo el codigo que os paso a continuación, lo que pretendo es poder inicializar un objeto con una clase que a su vez hereda de otra, pero el atributo de gagos es un array y no consigo que se almacenen los datos y visualizarlos

Agradezco la ayuda

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
//Clase Vecino
class Vecino{
    public $nombre;
    public $numero;
    //constructor
    function __construct($nombre, $numero) {
        $this->nombre = $nombre;
        $this->numero = $numero;
    }
    public function getNombre() {
        return $this->nombre;
    }
    public function setNombre($nombre) {
        $this->nombre = $nombre;
    }
    public function getNumero() {
        return $this->numero;
    }
    public function setNumero($numero) {
        $this->numero = $numero;
    }
}//fin vecino
//Clase Propietario que hereda de Vecino, ademas atributo pagos
class Propietario extends Vecino{
    public $pagos=array();
    //var $pagos=["1"=>100,"2"=>200];
function __construct($pagos) {
    $this->pagos = $pagos;
}
 
public function getPagos() {
return $this->pagos;
}
public function setPagos($pagos) {
$this->pagos = $pagos;
}
//funcion añadir pagos
public function anadirPagos($pago){
    //$this->pagos=$pago;
    $pagos_push=$pago;
}
}//fin propietario
$pepe=new Propietario(0);
$pepe->setNombre("Pepe");
$pepe->setNumero("42");
echo $pepe->getNombre();
echo "<br>";
echo $pepe->getPagos();
echo "<br>";
echo "Hago un pago de 100";
echo "<br>";
$pepe->anadirPagos(100);
echo "<br>";
echo "Visualizo los pagos";
echo "<br>";
print_r($pepe->pagos);
echo "<br>";
echo "Hago unn pago de 500 y los muestro";
$pepe->anadirPagos(500);
echo "<br>";
echo $pepe->pagos[0];
echo $pepe->pagos[1];
?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Duda herencia objetos php

Publicado por Julio (830 intervenciones) el 16/03/2020 14:05:52
Hola.

Por una parte, por mucho que inicialices dentro de la clase como un array a $pagos, si luego haces esto:

1
$pepe=new Propietario(0);

Le estás pasando un entero, así que $pagos se transforma en un entero, no en un array.

Por otra parte, esto:

1
2
3
4
public function anadirPagos($pago){
    //$this->pagos=$pago;
    $pagos_push=$pago;
}

¿Qué se supone que hace? Porque no te va a añadir ningún pago de esa forma.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 33
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Duda herencia objetos php

Publicado por Fulgencio (20 intervenciones) el 16/03/2020 14:22:16
Si le quitó el valor al inicializar me da error, me pide un parametro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Duda herencia objetos php

Publicado por Julio (830 intervenciones) el 16/03/2020 14:37:44
No te he dicho que le quites el valor...

Te comentaba que le estás pasando un entero, no un array. Si le pasas un entero pero luego quieres que esa variable sea un array..., ¿entiendes? O sea, deberías hacer algo así:

1
$pepe=new Propietario(array());

De todas formas, si ya vas a inicializar con un array vacío dentro de la clase, ese parámetro en el constructor debería ser opcional. Deberías hacer algo así dentro de la clase:

1
2
3
4
5
6
7
class Propietario extends Vecino{
    public $pagos;
 
    public function __construct($pagos = array()) {
        $this->pagos = $pagos;
    }
}

O sea, no hace falta que la inicialices cuando defines el atributo (aunque se puede, por supuesto), porque ya lo haces en el constructor. Si ahora no le pasas nada al constructor, se inicializa con el array vacío. Si le pasas algo, TIENE que ser un array, porque un 0 es un entero y no estarás guardando en $pagos un array, con lo que luego te dará error.

Es más, para asegurarte deberías hacer algo así:

1
2
3
4
5
6
7
8
9
10
11
class Propietario extends Vecino{
    public $pagos;
 
    public function __construct($pagos = array()) {
        if (is_array($pagos)) {
            $this->pagos = $pagos;
        } else {
            $this->pagos = array();
        }
    }
}

Así haces una pequeña comprobación antes de asignarle el valor, pues te aseguras de que será un array siempre. Si se le pasa un array correcto, lo asigna. Si no se le pasa un array correcto, le asigna el array vacío.

Haciéndolo así, podrías hacer esto sin problemas:

1
$pepe=new Propietario();

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 33
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Duda herencia objetos php

Publicado por Fulgencio (20 intervenciones) el 19/03/2020 14:48:58
sigo avanzando
Me podeis decir como lo veis?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<!DOCTYPE html>
 
<!--Ejercicio 1 Segunda Evaluacion examen Junio -->
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        //Clase Vecino
        class Vecino{
            public $nombre;
            public $numero;
            //constructor
            function __construct($nombre, $numero) {
                $this->nombre = $nombre;
                $this->numero = $numero;
            }
            public function getNombre() {
                return $this->nombre;
            }
            public function setNombre($nombre) {
                $this->nombre = $nombre;
            }
            public function getNumero() {
                return $this->numero;
            }
            public function setNumero($numero) {
                $this->numero = $numero;
            }
        }//fin vecino
        //Clase Propietario que hereda de Vecino, ademas atributo pagos
        class Propietario extends Vecino{
            public $pagos;
            //var $pagos=["1"=>100,"2"=>200];
        function __construct($pagos=array()) {
            if(is_array($pagos)){
                $this->pagos=$pagos;
            }else{
                $this->pagos=array();
            }
        }
 
        public function getPagos() {
        return $this->pagos;
        }
        public function setPagos($pagos) {
        $this->pagos = $pagos;
        }
        //funcion añadir pagos
        public function anadirPagos($pago){
            array_push($this->pagos,$pago);
        }
        public function totalPagos(){
            $longitud = count($this->pagos);
            $total=0;
            for($i=0; $i<$longitud; $i++){
                    $total=$total+$this->pagos[$i];
                }
                return $total;
        }
        }//fin propietario
        //Clase Comunidad, es un array de propietarios
        class Comunidad{
            public $lista_propietarios;
            function __construct($lista_propietarios=array()) {
                if(is_array($lista_propietarios)){
                    $this->lista_propietarios=$lista_propietarios;
                }else{
                    $this->lista_propietarios=array();
                }
            }
            function getLista_propietarios() {
                return $this->lista_propietarios;
            }
 
            function setLista_propietarios($lista_propietarios) {
                $this->lista_propietarios = $lista_propietarios;
            }
            public function anadirPropietario($propietario){
                array_push($this->lista_propietarios,$propietario);
            }
 
 
        }
        //////////////////////////////////////////////////
        //PRUEBAS A LO BRUTO
        /////////////////////////////////////////////////////
        //Creo el primer propietario
        $pepe=new Propietario();
        $pepe->setNombre("Pepe");
        $pepe->setNumero("42");
        //Creo el segundo propietario
        $juan=new Propietario();
        $juan->setNombre("Juan");
        $juan->setNumero("10");
        /////////////////////////////////////////////////////
        //IGO CON LAS PRUEBAS A LO BRUTO
        /////////////////////////////////
        echo $pepe->getNombre();
        echo "<br>";
        //echo $pepe->getPagos();
        echo "<br>";
        echo "Hago un pago de 100";
        echo "<br>";
        $pepe->anadirPagos(100);
        echo "<br>";
        echo "Visualizo los pagos";
        echo "<br>";
        print_r($pepe->pagos);
        echo "<br>";
        echo "Hago unn pago de 500 y los muestro";
        $pepe->anadirPagos(500);
        echo "<br>";
        print_r($pepe->pagos);
        echo "<br>";
        foreach($pepe->pagos as $elementos) {
        echo "<br>";
        echo $elementos;
        echo "<br>";
        }
        echo "Total de pagos: "+$pepe->totalPagos();
        echo "<br>";
        echo "Vamos con la comunidad";
        echo "Metemos a pepe como propietraio de la comunidad";
        $miComunidad=new Comunidad();
        $miComunidad->getLista_propietarios();
        $miComunidad->anadirPropietario($pepe);
        echo "<br>";
        echo "Visualizamos los propietarios de la comunidad";
        echo "<br>";
        foreach($miComunidad->lista_propietarios as $prop) {
        echo "<br>";
        echo $prop->nombre;
        echo "<br>";
        }
        ?>
        <!--formulario donde se selecciona un usuario y se le añade un pago -->
        <form id="frmDatos" method="POST" action="resultados.php">
            Propietario: <input type="text" id="txtPropietario" name="txtPropietario"/><br>
            Pago: <input type="text" id="txtPago" name="txtPago"/><br>
            <input type="submit" id="btnEnviar" value="Enviar"><br>
        </form>
    </body>
</html>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Duda herencia objetos php

Publicado por Julio (830 intervenciones) el 19/03/2020 15:08:43
¿Cuál es tu problema?

Errores no veo, aunque yo haría:

- los atributos de las clases los pondría private, pues ya tienes creados getters y setters para modificar sus valores, así que mejor poner los atributos como private. Por tanto, cuando haces $pepe->pagos deberías hacer $pepe->getPagos()

- al igual que en el constructor compruebas que $pagos y $lista_propietarios sean arrays, también deberías hacer esta misma comprobación en setPagos y en setLista_propietarios, porque te pasará lo mismo

Por último, mientras tengas claro que ese formulario va a hacer que reinicies las clases a 0 cada vez que envías alguna...

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 33
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Duda herencia objetos php

Publicado por Fulgencio (20 intervenciones) el 19/03/2020 15:38:24
En el formulario meto un propietario y un pago.
El propietario lo creo por código desde el Index, al igual que Pepe
Lo hago después del formulario es en un if... then si el usuario es Pepe entonces llamo a Pepe sñadirpago, pasándole como parámetro el valor recogido del formulario
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Duda herencia objetos php

Publicado por Julio (830 intervenciones) el 19/03/2020 16:32:12
Disculpa, no te he entendido. ¿Ese formulario va a parar al mismo archivo en donde defines las clases?

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Duda herencia objetos php

Publicado por Julio (830 intervenciones) el 19/03/2020 16:53:50
Ya, ¿pero a dónde?

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 33
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Duda herencia objetos php

Publicado por Fulgencio (20 intervenciones) el 19/03/2020 17:03:24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
include 'index.php';
$miPropietario=$_POST['txtPropietario'];
$miPago=$_POST['txtPago'];
/*echo $miPropietario;
echo $miPago;*/
 
if($miPropietario=="pepe"){
    //echo "Se añade el pago a Pepe";
    $pepe->anadirPagos($miPago);
}elseif ($miPropietario=="juan"){
    //echo "Se añade el pago a Juan";
    $juan->anadirPagos($miPago);
}else{
    echo "No ha seleccionado un propietario correcto.";
}
 
 
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Duda herencia objetos php

Publicado por Julio (830 intervenciones) el 19/03/2020 17:12:32
Ok. ¿Pero luego vuelves al formulario? ¿Los datos de la clase dónde los guardas entonces?

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 33
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Duda herencia objetos php

Publicado por Fulgencio (20 intervenciones) el 19/03/2020 17:22:16
No los guardo en bdd, luego muestro propietario y pagototal
Lo que me interesa es saber si el proceso de diseño de clases, herencia, instancia ion y crear obj con datos de un formulario lo hago bien
Muchas gracias por todo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar