вот пишешь ты драйвера базы данных.
соответственно, у тебя должен быть абстрактный класс драйвера. который заставляет потомков реализовать некоторый набор методов, в свою очередь, для некоторых операций может какую-то реализацию предложить.
и потом, есть у тебя допустим модель, которой требуется, чтобы ей передали драйвер базы данных.
если у тебя есть абстрактный класс - ты можешь написать так: function __construct(Db_Driver $driver);