Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Camila Nova en 05 de Noviembre 2015, 11:26
-
Hola que tal
les cuento que me toco construir un codigo que me permita grabar un nuevo valor para 2 objetos distintos con distintas propiedades, el problema que tengo es que al consultar, me devuelve la primera instancia repetida; o sea, como que la segunda no es consultada pero si seteada, el codigo en cuestion es este
<?php
class Perro
{
public $prop1 = "Soy un collie!!";
public $prop2 = "Cachupín";
public function setProperty($newval)
{
$this->prop1 = $newval;
$this->prop2 = $newval;
}
public function getProperty()
{
return $this->prop1 . "<br />";
return $this->prop2 . "<br />";
}
}
$obj = new Perro;
$obj2 = new Perro;
echo $obj->getProperty();
echo $obj2->getProperty();
$obj->setProperty("Ahora soy un Terrier");
$obj2->setProperty("Soy parte de la segunda instancia!");
echo $obj->getProperty();
echo $obj2->getProperty();
?>
y lo que me devuelve es:
Soy un collie!!
Soy un collie!!
Ahora soy un Terrier
Soy parte de la segunda instancia!
cuando lo que me debiese devolver seria
Soy un collie!!
Cachupín
Ahora soy un Terrier
Soy parte de la segunda instancia!
Ques estoy haciendo mal?
Cualquier ayuda es bienvenida
de antemano agradezco a cualquiera que me lea
saludos :)
-
Hola Camila Nova: una función no puede tener dos return. La función se ejecuta hasta llegar a un return, y en ese momento se devuelve el control al punto desde donde fue llamada.
El problema está aquí:
public function getProperties() {
return $this->prop1 . "<br />";
return $this->prop2 . "<br />";
}
Para devolver las dos propiedades tienes que hacerlo en un solo return:
public function getProperties() {
return $this->prop1 . "<br />". $this->prop2 . "<br />";
}
El código podría quedar así:
<meta charset = "utf-8" />
<?php
class Perro {
public $prop1 = "Soy un collie!!";
public $prop2 = "Cachupín";
public function setProperties($newval1, $newval2) {
$this->prop1 = $newval1;
if ($newval2) {$this->prop2 = $newval2;}
}
public function getProperties() {
return $this->prop1 . "<br />". $this->prop2 . "<br />";
}
}
$obj = new Perro;
$obj2 = new Perro;
echo $obj->getProperties();
echo $obj2->getProperties();
$obj->setProperties("Ahora soy un Terrier", "");
$obj2->setProperties("Soy parte de la segunda instancia!", "");
echo '<br/>Propiedades del objeto 1: '.$obj->getProperties();
echo '<br/>Propiedades del objeto 2: '.$obj2->getProperties();
?>
En realidad en general en programación orientada a objetos cada propiedad tiene un método distinto para recuperarse, es decir, tendrías un getProp1 y un getProp2.
Saludos.
-
Gracias por tu respuesta Alex, había llegado a una solución similar, pero al igual que el codigo que me presentas la instancia 2 se sigue repitiendo al consultar el codigo al final, me explico
la salida debiera ser:
Soy un collie!!
Cachupín
Ahora soy un Terrier
Soy parte de la segunda instancia!
y me devuelve:
Soy un collie!!
Cachupín
Soy un collie!!
Cachupín
Ahora soy un Terrier
Cachupín
Soy parte de la segunda instancia!
Cachupín
esto a que se debera?
-
Hola tienes que fijarte en que tienes dos objetos y cada objeto tiene dos propiedades (atributos).
Inicialmente las propieddes de un objeto creado son "Soy un collie" y "Cachupin".
Si quieres cambiar las dos propiedades en un objeto tienes que escribir:
$obj->setProperties("Ahora soy un Terrier", "Soy parte de la segunda propiedad");
Si quieres aprender los conceptos de la programación orientada a objetos te recomiendo este curso https://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188
Saludos