gpt4 book ai didi

php - 是否可以在 PHP 接口(interface)中定义具有不同参数的方法?

转载 作者:可可西里 更新时间:2023-10-31 22:19:17 26 4
gpt4 key购买 nike

我正在开发一项正在注入(inject) Logger 对象的服务,但我可以拥有 2 种不同类型的记录器,我计划拥有一个系统日志记录器和一个队列消息系统记录器。这可能吗?

想法是有一个接口(interface):

interface Loggable
{
public function log() ;
}

和实现该接口(interface)的 2 个类:

class Syslogger implements Loggable
{
public function log()
{
...
}
}

class QMSLogger implements Loggable
{
public function log($queueName)
{
...
}
}

我能想到的唯一方法是将数组作为参数并在一个类上使用它而不在另一个类上使用...但这有点臭:P

最佳答案

你在问是否可能:是的,但是......

如果您实现一个接口(interface),您必须遵守其约定

interface Loggable
{
public function log();
}

这个接口(interface)的契约是你可以不带任何参数调用log()

为了尊重这一点,您可以将参数设为可选:

class QMSLogger implements Loggable
{
public function log($queueName = null)
{
...
}
}

这是 perfectly valid PHP并且它尊重 Liskov 替换原则。当然,在针对接口(interface)进行编码时一定不要使用该可选参数,否则显然会破坏接口(interface)。此类参数仅在您使用实现时才有用(例如,在与 QMSLogger 紧密耦合的代码的某些部分)。

然而,这可能不是您问题的解决方案,因为 $queueName 似乎是一个配置值,最好将它传递到类的构造函数中(如其他答案中所述) .

关于php - 是否可以在 PHP 接口(interface)中定义具有不同参数的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13970242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com