我的问题基本上是…在PHP中创建函数的最佳实践是什么?
Eg -如果我有两个选项,赞成和反对。
因此,一个选择是为upvote和downvote创建两个独立的函数,如-
function upvote($id,$user){
//The upvote code goes here..
}
function downvote($id,$user){
//The downvote code goes here..
}
另一种选择是使用if-else
将两个函数合并为一个。如:
function vote($id,$user,$vote){
if( $vote == 'upvote' ){
//The upvote code goes here..
}
else {
// the downvote code goes here..
}
}
所以我想知道这两种方法中哪一种是好的做法,哪一种可以更快(性能方面)。
PS -我包括我的函数文件在每个页面的顶部。
我认为第一选择可以很好:
function upvote($id,$user){
//The upvote code goes here..
}
function downvote($id,$user){
//The downvote code goes here..
}
因为这在将来编辑代码方面是灵活的,就速度而言…我认为两者不会有太大的差异。
通常将它们分开比较好。一个好的目标是让每个函数只执行一个操作。它使将来的调试变得容易得多,并使代码更具可读性。在这里可以更好地解释这个原则:
http://en.wikipedia.org/wiki/Separation_of_concerns将代码拆分为单独的函数可以减少其toxicity
,因此建议使用
或者换句话说:一个函数越大、越复杂,它就越难读,也就越有可能出现bug。
如果一段代码可以被分成逻辑部分,你应该这样做。
用一个函数代替两个函数没有任何好处。这取决于是什么在函数:db调用中,webservices调用ecect。
如果两个函数内部的功能相同且相同,则一个函数可能有意义唯一改变的是$vote参数和您不想重复自己,复制/粘贴代码到不同的函数。
我总是尝试使用单一职责模式,以便一个函数只做功能。
从人类的角度来看,你可能认为投票是一个单一的动作——只是投票;因为一般来说你不会说-我要给某人投赞成票或反对票;)。但是在这种情况下,如果您认为是面向对象的,那么您有一个帖子可以被否决或赞同。像这样
class post {
var $votes = 0;
// other staff
function up-vote () {
$this->votes = $this->votes++;
}
function down-vote () {
$this->votes = $this->votes--;
}
}
可以看到,类post
有two separate methods
。在性能方面,差异很小。