Очень часто на примерах и прототипах приходится разбирать какую-то задачу которая может произойти в боевой ситуации при разборе чужого кода. Ситуации бывают разные и сложность кода достаточно объёмная. Ладно если код большой, так он может быть и вовсе не читабельным который может превратиться в полный #говнокод.
Изучая различные ошибки с которыми придётся столкнутся в будущем или изучая определённую тему я разбирался с трейтами(http://php.net/manual/ru/language.oop5.traits.php) (#trait). Тема достаточно обширная и интересная. Сам трейты появились в ветке #php5.4 Трейты позволяют повторно использовать код php что даёт достаточно большие возможности для php.
Самый просто пример трейтов:
Я решил его расширить и сделал сложный пример с наследованием а так же переопределением конфликтов.
Все методы у меня публичные но имеют одни и те-же имена что вызывает фатальную ошибку при неявном описании:
<?php ini_set('error_reporting', E_ALL); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); trait C { public function g() { echo __METHOD__; } } trait R { public function g() { echo __METHOD__; } } /** * parent Class::method */ class B { use C, R { R::g insteadof C; } public function g() { echo __METHOD__; $this -> g(); } } /** * node Class::method */ class A extends B { use R, C { C::g insteadof R; } public function f() { echo __METHOD__; B::g(); } } $a = new A; $a -> f();
В итоге мы получим
A::fB::gC::g