<?php

class Dog {
  function say () { echo "Гав"; } 
}
class Cat {
  function say () { echo "Мяу"; } 
}

// А теперь введем аспект, "усиливающий" say()
trait Strong {
  function say () { parent::say(); echo "!"; }
}

class StrongDog extends Dog { use Strong; }
class StrongCat extends Cat { use Strong; }

$animals = [new Dog(), new Cat(), new StrongDog(), new StrongCat()];
foreach ($animals as $a) {
  $a->say(); echo "\n";
}