Прежде всего, я не согласен с тем, что интерфейс - это просто контракт на передачу данных. Если бы это было правдой, вам было бы разрешено определять свойства в интерфейсе.
Я бы не подумал, что странно делать что-то вроде:
interface IDBConnection
{
function __construct( $connectionString );
function executeNonQuery( $commandText, $paramters=null);
function executeScalar( $commandText, $paramters=null);
function executeSingle( $commandText, $paramters=null);
function executeArray( $commandText, $paramters=null);
}
Это позволит вам создавать экземпляры сторонних классов для доступа к данным на основе простого отражения, а не просто как контракт на данные.
Я почти уверен, что это не лучший пример, я бы остановился на абстрактном базовом классе здесь, в реальном мире, но я также уверен, что есть совершенно веские причины для определения методов конструктора контракт в интерфейсе, о котором я даже не думал.
Я не видел, чтобы это было сделано, но я бы не подумал, что это странно или плохо.