怎样处理这样的函数传参问题?

2013-04-11 17:55:21 +08:00
 darasion
以 php 为例:



假设有个函数是发表文章:
function post($title, $content) { ... }

后来可能需要一些改动比如加入一些作者什么的
function post($title, $author, $content){ ... }

再后来,再加入了分类:
function post($title, $auhor, $content, $cat) { .... }

以此类推。
这个函数有可能很多地方都在调用,改了签名可能会影响一大堆的地方。这样显然不好。




于是有人想了个办法:
function post($data) { ... }
$data 是个大数组,不论里边怎么变,都不用改动别的代码了。

但是这又带来另外一个问题:
我从函数的签名不知道这个函数都能使用哪些参数,违背了一开始封装的初衷,更恼人的是过了几个月之后,代码的作者都不知道这个函数该怎么用了!


怎么处理这种经常变更的情况呢?
2973 次点击
所在节点    程序员
4 条回复
skydiver
2013-04-11 18:00:38 +08:00
加入默认参数啊,

function post($title, $content) { ... }
改之后变成
function post($title, $content, $author='skydiver', $cat='default') { ... }
AlloVince
2013-04-11 18:02:19 +08:00
OOP

class Post {
protected $title;
protected $content;
public function getTitle(){}
public function getContent(){}
}
fkccp
2013-04-11 19:00:29 +08:00
默认参数+1
nkliwenjian
2013-04-11 19:12:44 +08:00
懒得改到最后只会自己吃亏,加参数加到第三个的时候基本上就应该动手重构了。
重构的话,基本上这个属于典型的参数对象的,把这一堆参数抽象成一个对象,然后传的时候只需要传一个对象就可以了。当然不叫data了,叫article呗,然后里面是article.title,article.content之类的。
我倒不觉得有很多地方用就很难改。
函数内部就不说了,调用的地方基本上就是做个正则表达式替换的事情。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/65603

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX