class A {
private $b;
public function b() {
$this->b = new B($this);
return $this->b;
}
}
class B {
private $a;
public function __construct(A $a){
$this->a = $a;
}
public function test() {
return $this;
}
public function a() {
return $this->a;
}
}
$obj = new A;
$obj->b()->test()->a()->...(...);