Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Типичный программист без особых раздумий сделает так, как приведено выше: внесет вызов нужных методов в код методов «кушать» и «спать», нарушив принцип единственной ответственности каждого из этих методов. Благо, условия простые, можно разобраться с тем, почему это было сделано именно здесь.
class Eat {
function __construct(Human $human) {
//...
}
public function eat(Food $food) {
$this->human->washUp();
echo "Eating...", PHP_EOL;
$this->human->cleanTeeth();
}
}
class HumanContext {
public function eat(Human $human, Food $food) {
$human->washUp();
echo "Eating...", PHP_EOL;
$human->cleanTeeth();
}
}
А вот приводить альтернативы в виде шаблонов OOP не нужно, их и так все знают, в сети полно материала на эту тему.
Типичный программист без особых раздумий сделает так, как приведено выше: внесет вызов нужных методов в код методов «кушать» и «спать», нарушив принцип единственной ответственности каждого из этих методов.
/**
* @Before("execution(public Human->sleep())")
*/
Библиотека Go! использует уникальную для PHP технологию Load-Time Weaving, которая позволяет отследить момент загрузки класса и изменить этот код до его анализа парсером PHP.
Это и есть та самая знаменитая метрика: WTF/строчку кода.
Знакомимся с аспектно-ориентированным программированием в PHP