Как изменить тип параметра метода в php при наслодовании? Допустим у нас есть два интерфейсаinterface Message {
function send();
function setSender(Sender $sender);
}
interface Sender {
function send(Message $message);
}
И конкретные реализацииclass EmailMessage implements Message {
private $sender;
public function setSender(Sender $sender) {
$this->sender = $sender;
}
function send() {
$this->sender->send($this);
}
}
class SmtpEmailMessageSender implements Sender{
private $server;
private $login;
private $password;
public function __construct($server, $login, $password) {
$this->server = $server;
$this->login = $login;
$this->password = $password;
}
function send(Message $message) {
..... код отправки.....
}
}
Как реализовать чтобы SmtpEmailSender принимал только EmailMessage для отправки, а не любой Message?

21 Авг 2019 в 07:06
183 +1
0
Ответы
1

Для изменения типа параметра метода при наследовании в PHP можно использовать типизацию аргументов и возвращаемых значений (type hinting). В вашем случае, нужно изменить тип параметра метода send у интерфейса Sender на EmailMessage:

interface Sender {
function send(EmailMessage $message);
}

Таким образом, класс SmtpEmailMessageSender будет принимать только объекты типа EmailMessage для отправки:

class SmtpEmailMessageSender implements Sender{
private $server;
private $login;
private $password;

public function __construct($server, $login, $password) {
$this->server = $server;
$this->login = $login;
$this->password = $password;
}
function send(EmailMessage $message) {
..... код отправки.....
}

}

Теперь при попытке передать объект другого типа в метод send класса SmtpEmailMessageSender, будет вызвана ошибка типа.

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 371 автору
Первые отклики появятся уже в течение 10 минут
Прямой эфир