PHP: Traits všude kolem nás

POZOR! Článek jsem napsal před více jak rokem, a tudíž už nemusí reflektovat můj nynější názor nebo může být zastaralý.

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"
    }
}

Sdílením článku mi pomůžete a uděláte mi velikou radost :)

Komentáře