PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php-父类是否有通用的设计模式来调用其几个子类大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

例如,我有几个要处理交易的不同商人客户.他们需要不同的度量标准来确定欺诈行为,其中许多是很常见的.我想要一些效果:@H_489_1@

class Fraud
{

}

class InvalidcheckFraud extends Fraud
{

}

class NotAMemberFRaud extends Fraud
{

}

class CustomerLooksFunnyFraud extends Fraud
{

}

等等…@H_489_1@

我只想使用以下命令就可以对零个扩展的欺诈类进行零运行:@H_489_1@

$fraudcheck = new Fraud();
$fraudcheck->checkMerchant($merchId);

我不介意以完全本土化的方式解决此问题,但是如果已经弄清楚了,我想走这条路.@H_489_1@

我使用PHP进行编码,但可以使用任何其他语言的参作为参.@H_489_1@

解决方法:@H_489_1@

看起来您在寻找类似Strategy pattern的东西.@H_489_1@

您应该为Fraud@L_674_6@一个接受$merchId的接口:@H_489_1@

interface Fraud {
    public function check($merchId);
}

然后实现每个子类:@H_489_1@

class InvalidcheckFraud implements Fraud {
    public function check($merchId) {
        // do something and return
        return true;
    }
}

class NotAMemberFraud implements Fraud
{
    public function check($merchId) {
        // do something and return
        return false;
    }
}

然后,创建一个上下文类,检查每个类:@H_489_1@

class FraudContext implements Fraud {
    protected $_frauds = array();    

    public function addFraud(Fraud $fraud) {
        $this->_frauds[] = $fraud;
    }

    public function check($merchId) {
        foreach ($this->_frauds as $fraud) {
            if (!$fraud->check($merchId)) {
                throw new LogicException(
                  "{$merchID} has Failed the check for ".get_class($fraud)
                );
            }
        }
        return true;
    }
}

$merchId = 42;
$context = new FraudContext;
$context->addFraud(new InvalidcheckFraud);
$context->addFraud(new NotAMemberFRaud);
$context->check($merchId);

大佬总结

以上是大佬教程为你收集整理的php-父类是否有通用的设计模式来调用其几个子类全部内容,希望文章能够帮你解决php-父类是否有通用的设计模式来调用其几个子类所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: