oop — расширенный класс PHP — метод подкласса против переопределения родительского метода для частного

У меня есть родительский класс (я не хочу его редактировать), который содержит некоторые методы

class Message {

private function createNewMessageSimpleOrAlternativeBody() {

...some code here...
}

private function createNewMessageRelatedBody($oPart){

...some code here...
}

private function createNewMessageMixedBody($oPart){
...some code here...
}

public function ToPart($bWithoutBcc = false)
{
$oPart = $this->createNewMessageSimpleOrAlternativeBody();
$oPart = $this->createNewMessageRelatedBody($oPart);
$oPart = $this->createNewMessageMixedBody($oPart);
$oPart = $this->setDefaultHeaders($oPart, $bWithoutBcc);

return $oPart;
}
}

тогда у меня есть другой класс, который распространяется выше и где я хочу добавить свой код

class MessageEx extends Message {

private function createNewMessageSimpleOrAlternativeBody() {

...some code here + additional code...
}

private function createNewMessageRelatedBody($oPart){

...some code here + additional code...
}

private function createNewMessageMixedBody($oPart){
...some code here + additional code...
}

public function ToPart($bWithoutBcc = false)
{
$oPart = $this->createNewMessageSimpleOrAlternativeBody();
$oPart = $this->createNewMessageRelatedBody($oPart);
$oPart = $this->createNewMessageMixedBody($oPart);
$oPart = $this->setDefaultHeaders($oPart, $bWithoutBcc);

return $oPart;
}
}

но в расширенном классе, когда я пытаюсь использовать публичную функцию ToPart() он говорит мне, что любой используемый там метод был объявлен в родительском классе, не входящем в этот подкласс, что я ожидал, так как каждый из них является частным и могут быть доступны только внутри класса $this. В этом случае отредактированные функции не выполняют мой код, поскольку они не вызываются, даже когда я объявил их (методы в подклассе) как final или же protected

Что я пропустил?

-1

Решение

Если я вас правильно понимаю, вы хотите добавить код в существующие методы из Message пытаясь переопределить их в вашем унаследованном классе MessageEx,

Хотя ваш код технически будет работать как опубликовано, ваши методы в MessageEx (например. createNewMessageSimpleOrAlternativeBody() ) не сможет позвать своих подвесок в Messageпотому что методы в Message являются частными. С помощью final или же protected в подклассе работать не будет.

Но то, что вы можете сделать, это вызвать публичный метод ToPart от Message с parent::ToPart(..)который, в свою очередь, будет вызывать частные методы в Message,

Или, если это не соответствует логике вашего кода, единственный вариант — изменить методы в Message на protectedчтобы они стали доступны в MessageEx,

-1

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

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

По вопросам рекламы [email protected]