Что бы можно было работать в цикле (при помощи конструкции instanceof) с разными сайтами не думая о том что происходит внутри класса Provider.
Для этого существует полиморфизм. Instanceof - это антипаттерн.
По большому счету, замена трейтов - агрегация. Инжектите в конструкторе провайдера нужные обработчики и вызывайте уже их:
class FooProfileThing implements ProfileThingInterface {}
class FooMessageThing implements MessageThingInterface {}
class FooProvider extends Provider
{
public function __constructor($bar)
{
$this->bar = $bar;
$this->profileThing = new FooProfileThing;
$this->messageThing = new FooMessageThing;
}
}
Таким образом вы соблюдете принцип единственной ответственности и сможете более разумно построить иерархию этих объектов.
Да и вообще, что это за объекты
Profile,
Message,
News, для которых вы создали интерфейс? Почему Provider одновременно ведет себя как профиль, сообщение и новость? Это сущности действительно однотипны?