Как изменить тип параметра метода в 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?
Для изменения типа параметра метода при наследовании в 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, будет вызвана ошибка типа.
Для изменения типа параметра метода при наследовании в PHP можно использовать типизацию аргументов и возвращаемых значений (type hinting). В вашем случае, нужно изменить тип параметра метода send у интерфейса Sender на EmailMessage:
interface Sender {
function send(EmailMessage $message);
}
Таким образом, класс SmtpEmailMessageSender будет принимать только объекты типа EmailMessage для отправки:
class SmtpEmailMessageSender implements Sender{
public function __construct($server, $login, $password) {private $server;
private $login;
private $password;
$this->server = $server;
$this->login = $login;
$this->password = $password;
}
function send(EmailMessage $message) {
..... код отправки.....
}
}
Теперь при попытке передать объект другого типа в метод send класса SmtpEmailMessageSender, будет вызвана ошибка типа.