Biliyorsunuz PHP5.4 ile çoklu kalıtıma olanak sağlamak amacıyla hayatımıza "trait"ler de girdi. Basit anlamda, "trait"ler yardımıyla DRY anlayışını benimsiyoruz ve tanımladığımız sınıflara çoklu kalıtım uygulayabiliyoruz.

Aşağıdaki basit bir "trait" ile de tanımlayacağınız sınıflarda her "property" için ayrı ayrı getter/setter metotları tanımlamadan işini görebiliyorsunuz. Kod üstünde gerekli açıklamayı bulacaksınız:
<?php

// "trait"imizi tanımlıyoruz.
trait GetterSetterGenerator
{
    // __call sihirli metotu sınıftan bir metot çağrıldığında *tanımlı değilse* çaıştırılır.
    public function __call($name, $arguments)
    {
    	// "get"ter ve "set"ter metotlarının ilk 3 karakterini silip küçük harflere dönüştürdüğümüzde "property"in ismini almış olduk.
        $property = strtolower(substr($name, 3));

        // Burada da ilk üç harfe göre metotumuz "get"ter mi yoksa "set"ter mi diye işlem yapıyoruz.
        if (substr($name, 0, 3) == 'set')
            $this->$property = $arguments[0];
        elseif (substr($name, 0, 3) == 'get')
            return $this->$property;

        // Metot zincirleme için sınıf örneğini dönderiyoruz.
        return $this;
    }
}

class User
{
	// Bu sınıfta "trait"imizi kullanıyoruz.
	use GetterSetterGenerator;

	protected $id;
	protected $username;
	protected $password;

	// Burası önemli nokta: Eğer herhangi bir metotu kendiniz tanımlarsanız öncelik sizin tanımladığınızdadır.
	// Bu nedenle bu sınıftan oluştuacağınız tüm örneklerde ID hep 88 olarak atanacaktır. Bu metotu silip
	// birde öyle denerseniz kendi atadığınız değer atanır.
	public function setId($value)
	{
		$this->id = 88;

		return $this;
	}
}

$u = new User;
$u->setId(65)
	->setUsername('grafitus')
	->setPassword('12345');

echo $u->getId(); // 88
echo $u->getUsername(); // grafitus
echo $u->getPassword(); // 12345