Как изменить тип параметра метода в 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
211 +2
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 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир