Comment faire une variable privée à un trait de caractère?

J'aimerais réutiliser une fonctionnalité en plusieurs fois dans une même classe. Cette fonctionnalité s'appuie sur une variable privée:

trait Address {
    private $address;

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

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

Le seul moyen que j'ai trouvé pour utiliser le trait deux fois, est la suivante:

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

        getAddress as getWorkAddress;            
        setAddress as setWorkAddress;
    }
}

Le problème est que, ce faisant, la variable privée $address est partagée entre les différentes méthodes, et le code ne fonctionnera pas comme prévu:

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

Est-il une solution pour vraiment utiliser le trait deux fois, tout en ne partageant pas ses variables privées?

OriginalL'auteur Benjamin | 2012-11-27