¿Cómo puedo acceder a un objeto contenedor en PHP?
Frecuentes
Visto 1,180 equipos
1
En este ejemplo, ¿cómo puedo acceder a una propiedad en el objeto? $containerObj
del desplegable getContainerID()
método en objeto $containerObj->bar
, o al menos obtener un puntero a la $containerObj
?
class Foo {
public $id = 123;
}
class Bar {
function getContainerID() {
... //**From here how can I can access the property in the container class Foo?**
}
}
$containerObj = new Foo();
$containerObj->bar = new Bar();
echo $containerObj->bar->getContainerID();
1 Respuestas
5
No puedes hacer eso de esta manera. Una referencia a una clase se puede asignar a múltiples variables, por ejemplo:
$bar = new Bar();
$container = new Foo();
$container->bar = $bar;
$container2 = new Foo();
$container2->bar = $bar;
Ahora, ¿qué contenedor Foo debería devolver PHP?
Será mejor que cambie su enfoque y haga que el contenedor sea consciente del objeto que se le asigna (y viceversa):
class Foo {
public $id = 23;
private $bar;
public function setBar(Bar $bar) {
$this->bar = $bar;
$bar->setContainer($this);
}
}
class Bar {
private $container;
public function setContainer($container) {
$this->container = $container;
}
public function getContainerId() {
return $this->container->id;
}
}
$bar = new Bar();
$foo = new Foo();
$foo->setBar($bar);
echo $bar->getContainerId();
contestado el 22 de mayo de 12 a las 15:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php object properties containers or haz tu propia pregunta.
Tus clases deben ser
Foo
yBar
por convención. Palabras enteramente en mayúsculas comoFOO
yBAR
normalmente se reservan para constantes. - meagarno puedes A menos que
Bar
contenía un puntero a su objeto principal (Foo
). Sin embargo, tal estructura de datos parece artificial usando dos objetos separados. Elija uno para exponer y encapsular el otro. - Jason McCreary