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.