PHP: Traits všude kolem nás

Publikováno PHP

Zdá se vám titulek trochu nadsazený? Nemyslím si, jedná se totiž o funkčnost, která se brzy stane součástí běžného programování. Určitě nejužitečnější vlastnost, která v nové verzi PHP 5.4 přibyla. Zbavuje nás omezení jednonásobné dědičnosti.

Co to jsou traits?

Pro pochopení co to traits vůbec jsou, si stačí uvědomit, že traits nejsou nic jiného než třída, která se nezdědí při definici, ale klausulí USE ve třídě, kde ji chceme použít.

trait Ovoce {
    function snist () {
        return 'Snězeno';
    }
}

class Jablko {
    use Ovoce;
}

$jablko = new Jablko;
echo $jablko->snist(); // Snězeno

Konflikty a aliasy

V případně dvou traits se stejnými metodami lze použít operátor insteadof (česky „namísto“).

trait Ovoce {
    function snist () {
        return 'Ovoce snězeno';
    }
}

trait Plod {
    function snist () {
        return 'Plod snězen';
    }
}

class Jablko {
    use Ovoce, Plod {
        Plod::snist insteadof Ovoce;
        Ovoce::snist as snistOvoce;
    }
}

$jablko = new Jablko;
echo $jablko->snist(); // Plod snězen
echo $jablko->snistOvoce(); // Ovoce snězeno

Změna viditelnosti

Nakonec uvedu použití změny viditelnosti metod.

class Jablko {
    use Ovoce, Plod {
        snist as protected; // Změní viditelnost na "protected"
    }
}

Komentáře