Обычно так:
В предке создается метод (см. FormLetter)
PHP код:
void writeJournal()
{
throw error(Error::missingOverload(funcName()));
}
а в потомке он перекрывается и наполняется полезными действиями
(см. SalesFormLetter_PackingSlip, PurchFormLetter_PackingSlip и т.д. и т.п.)