Como tornar uma variável privada em uma característica?

Eu gostaria de reutilizar uma funcionalidade várias vezes em uma única classe. Essa funcionalidade depende de uma variável particular:

trait Address {
    private $address;

    public function getAddress() {
        return $this->address;
    }

    public function setAddress($address) {
        $this->address = $address;
    }
}

A única maneira que encontrei parause o traço duas vezesé o seguinte:

class User  {
    use Address {
        getAddress as getHomeAddress;
        setAddress as setHomeAddress;

        getAddress as getWorkAddress;            
        setAddress as setWorkAddress;
    }
}

O problema é, ao fazer isso, a variável privada$address é compartilhado entre os diferentes métodos e o código não funcionará como esperado:

$user = new User();
$user->setHomeAddress('21 Jump Street');
echo $user->getWorkAddress(); // 21 Jump Street

Existe uma solução para realmente usar o traço duas vezes, sem compartilhar suas variáveis ​​privadas?

questionAnswers(3)

yourAnswerToTheQuestion