加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 将很多参数传递给parent :: __构造代码异味/差OOP?

发布时间:2020-12-13 17:10:00 所属栏目:PHP教程 来源:网络整理
导读:我正在写一些代码,我开始对凌乱的父:: __构造调用感到有点不舒服,我首先想知道它是不好的OOP练习,其次是有更清洁的方法吗?请参阅下面触发我的问题的特别极端的示例. ?phpclass BrowseNodeLookupRequest extends Request { protected $BrowseNodeId; public
我正在写一些代码,我开始对凌乱的父:: __构造调用感到有点不舒服,我首先想知道它是不好的OOP练习,其次是有更清洁的方法吗?请参阅下面触发我的问题的特别极端的示例.

<?php
class BrowseNodeLookupRequest extends Request {

    protected $BrowseNodeId;

    public function __construct($Service,$AWSAccessKeyID,$AssociateTag,$Operation,$MerchantID = null,$ResponseGroup = null,$Version = null,$Style = null,$ContentType = null,$XMLEscaping = null,$Validate = null,$BrowseNodeId) {
        parent::__construct($Service,$MerchantID,$ResponseGroup,$Version,$Style,$ContentType,$XMLEscaping);
        $this->setBrowseNodeId($BrowseNodeId);
    }

    protected function setBrowseNodeId($BrowseNodeId) {
        if (is_string($BrowseNodeId)) {
            $this->BrowseNodeId = $BrowseNodeId;
        } else {
            throw new Exception('BrowseNodeLookupRequest Parameter (BrowseNodeId
                                 ) Must be a String');
        }
    }

}
?>

解决方法

对任何函数都有许多参数是不好的做法,无论是__parent :: construct还是not.

它太容易搞砸了,特别是在PHP中.很多时候,这表明您缺少物体(或者部件之间的耦合太紧).如果你不能提出任何其他缺失的对象,我甚至更愿意传递一个“配置”对象.

class ConfigFoo
{
  public $Service,...,$foo,$bar;
}

$cfg = new ConfigFoo();
$cfg->Service = 'whatever';
...

$req = new BrowseNodeLookupRequest($cfg);

这基本上是一种传递参数数组的更结构化的方法.配置对象可以扩展其他配置对象以跟随其他对象.

当然,课程可以比简单的公共属性更先进.您可以管理数据完整性等.

需要明确的是:除非a)没有其他缺少的中间对象,否则我不会诉诸上述内容; b)有足够数量的参数使得使用简单数组就像一长串函数参数一样有问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读