Hi,

I have two classes User and Email where one User can have many Emails so
I've done like this

class Email
{
    protected $_email;

    public function __get($name)
    {
        $property = '_' . $name;
        return $this->$property;
    }

    public function __set($name, $value)
    {
        $property = '_' . $name;
        $this->$property = $value;
    }
}


class User
{
    protected $_name;
    protected $_emails = array();

    public function __get($name)
    {
        $property = '_' . $name;
        return $this->$property;
    }

    public function __set($name, $value)
    {
        $property = '_' . $name;
        $this->$property = $value;
    }

}

So I'd like to

$u = new User();
$u->name = 'xxxx';

$e = new Email();
$e->email = 'x...@xxxx.com';

$u->emails[] = $e;

But that does not work.  I've managed to achieve similar result using a
different setter in User

    public function __set($name, $value)
    {
        $property = '_' . $name;

        switch($name)
        {
            case 'emails':
                array_push($this->$property, $value);
                break;

            default:
               $this->$property = $value;
        }
    }

And then

$u = new User();
$u->name = 'xxxx';

$e = new Email();
$e->email = 'x...@xxxx.com';

$u->emails = $e;

But this can confuse the programmer.  Any ideas of why it is not working?

Reply via email to