Lo que me preocupa es que sigues intentando en modalidad de "prueba y error" y eso te lleva a equivocarte constantemente... lo más importante es que entiendas los conceptos, luego codificarlos será relativamente sencillo.
Si hablamos de una relación de "asociación" entre A y B, se representaría así:
A -> B (línea continua)
Código PHP:
class A{
private $b;
public function __construct(){
$this->b = new B();
}
public function getB(){
return $this->b;
}
}
class B{
public function decirHola(){
return "hola";
}
}
/* Aquí podrías hacer lo que buscas */
$a = new A();
echo $a->getB()->decirHola();
Y para cerrar el ejemplo, si hablamos de una relación de "asociación" entre A y B, se representa de esta forma:
A --->B (línea punteada)
Lo que significa que no tienes como parte de tu estructura (caso anterior) otro objeto, solo recibes por parámetro o crear dentro de un método, usas el objeto y luego, al concluir el método, este objeto desaparece.
Código PHP:
class A{
public function decirHola($objeto){
return $objeto->decirHola();
}
}
class B{
public function decirHola(){
return "hola";
}
}
$a = new A();
$b = new B();
echo $a->decirHola( $b );
Y la variación sería:
Código PHP:
class A{
public function decirHola(){
$b = new B();
return $b->decirHola();
}
}
class B{
public function decirHola(){
return "hola";
}
}
$a = new A();
echo $a->decirHola();
Nota: ni se te ocurra preguntarme qué es mejor
, aquí el tema es que cada diseño depende de lo que quieras hacer.
Volviendo a tu ejemplo particular, para hacer lo que quieres, tendrías que hacer algo similiar, así que te invito a que hagas un ejemplo como el que hice y lo coloques luego para ver qué comentarios te podemos hacer al respecto.