guillaume latour
guillaume latour

Reputation: 390

object used as property guess the class of his owner

I was wondering if it is possible for an object to guess the class of his "owner" if the "owner" have a property of the object class.

Let me explain what I mean by a small example

class A {
    public function Magic(){/*return owner's class*/}
}

class B {
    private $foo;
    public function __construct() {
        $this->foo=new A();
    }
    public function getFoo(){
        return $this->foo;
    }
}

class C {
    private $bar;
    public function __construct() {
        $this->bar=new A();
    }
    public function getBar(){
        return $this->bar;
    }
}
$b= new B();
$c= new C();
print($b->getFoo()->Magic()); // would print B
print($c->getBar()->Magic()); // would print C

I don't know if I am dreaming or if it's possible...

How would you do it if not possible?

Upvotes: 1

Views: 216

Answers (1)

Federkun
Federkun

Reputation: 36964

You need to inject to A his owner. So, the Magic method is less "magical", but the dependency is more clear.

class A
{
    private $owner;

    public function __construct($owner)
    {
        $this->owner = $owner;
    }

    public function Magic() { return get_class($this->owner); }
}

class B 
{
    private $foo;

    public function __construct()
    {
        $this->foo = new A($this);
    }

    public function getFoo()
    {
        return $this->foo;
    }
}

class C 
{
    private $bar;

    public function __construct()
    {
        $this->bar = new A($this);
    }
    public function getBar()
    {
        return $this->bar;
    }
}
$b= new B();
$c= new C();

print($b->getFoo()->Magic()); // would print B
print($c->getBar()->Magic()); // would print C

Upvotes: 1

Related Questions