абстрактный класс — Перегрузка методов в переполнении стека

У меня проблема с дизайном кода моего проекта.

Например:

У меня есть два модельных класса: AClass а также BClass который extends от CClass учебный класс.
Для каждого из этого класса у меня есть два уровня обслуживания: AService а также BService в котором у меня есть методы:

create(AClass $object) а также create(BClass $object) соответствующий.

Так что я хочу. Я хочу создать Abstract Service CService в котором у меня есть абстрактный класс create(CClass class), И мой AService а также BService должен extends отCService,
Но в PHP Я не могу сделать это, потому что это не удалось для совместимого исключения.

Так может быть какие-то идеи, как я могу решить эту проблему?

Обновить:
Может быть, не очень хороший пример выше, поэтому я покажу вам в реальном случае:

abstract class Contract
{
protected $id;
protected $owner
}

class FundTraderContract extends Contract
{
private $fundContract;
}

class InvestorTraderContract extends Contract
{
private $investmentContract;
}

abstract class ContractService
{
abstract function create(Contract $contract){}
}

class FundTraderContractService extends ContractService
{
public function create(FundTraderContract $contract)
{
//some logic
}
}class InvestorTraderContractService extends ContractService
{
public function create(InvestorTraderContract $contract)
{
//some logic
}
}

Я думаю, что теперь пример более легко увидеть. Так что в этом случае есть совместимая проблема.

0

Решение

Прежде всего, извинения, если это не так именно так что вы хотите — поскольку вы удалили все имена классов и просто перешли на AClass и т. д., действительно трудно понять логику вашего приложения.


http://en.wikipedia.org/wiki/Dependency_inversion_principle

Создать интерфейс. Не зная ваших реальных классов, невозможно дать ему значимое имя, но вы делаете это:

interface DInterface {  }

class AClass implements DInterface {  }
class BClass implements DInterface {  }

class CClass
{
public function something(DInterface $class) {  }
}

Вы можете определить вещи внутри DInterface это должно быть в обоих AClass а также BClassт.е. если CClass::something ожидает, что сможет позвонить $class->all() тогда вы можете определить public function all(); в DInterfaceи PHP выдаст ошибку, если либо AClass или же BClass не реализует это.

4

Другие решения

Других решений пока нет …