我正在写一些代码,我开始对凌乱的父:: __构造调用感到有点不舒服,我首先想知道它是不好的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)有足够数量的参数使得使用简单数组就像一长串函数参数一样有问题.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。