Php 修复具有高NPath复杂性的代码
当PHPMD报告我的一些代码具有很高的NPath复杂性时,我正在使用PHP Mess Detector分析我的代码。一个例子是:Php 修复具有高NPath复杂性的代码,php,phpmd,Php,Phpmd,当PHPMD报告我的一些代码具有很高的NPath复杂性时,我正在使用PHP Mess Detector分析我的代码。一个例子是: function compareDates($date1, $date2){ if($date->year < $date2->year){ return -1; } if($date->year > $date2->year){ return 1; } if(
function compareDates($date1, $date2){
if($date->year < $date2->year){
return -1;
}
if($date->year > $date2->year){
return 1;
}
if($date->month < $date2->month){
return -1;
}
if($date->month > $date2->month){
return 1;
}
if($date->day < $date2->day){
return -1;
}
if($date->day > $date2->day){
return 1;
}
// etc.. same for hour, minute, second.
return 0;
}
函数比较($date1,$date2){
如果($date->year<$date2->year){
返回-1;
}
如果($date->year>$date2->year){
返回1;
}
如果($date->month<$date2->month){
返回-1;
}
如果($date->month>$date2->month){
返回1;
}
如果($date->day<$date2->day){
返回-1;
}
如果($date->day>$date2->day){
返回1;
}
//等等,小时,分钟,秒都一样。
返回0;
}
结果是该函数具有非常高的NPath复杂性。是否有一种通用的编码方式来降低此类控制结构和NPath复杂性
源代码:排序函数必须返回-1,0,1是一种常见的误解。你能行
function compareDates($date1, $date2)
{
return strtotime("{$date1->year}-{$date1->month}-{$date1->day}")
- strtotime("{$date2->year}-{$date2->month}-{$date2->day}");
}
请注意,如果整数限制是一个问题,则可以使用不具有该限制的DateTime
,例如
function compareDates($date1, $date2)
{
return new DateTime("{$date1->year}-{$date1->month}-{$date1->day}")
< new DateTime("{$date2->year}-{$date2->month}-{$date2->day}");
}
函数比较($date1,$date2)
{
返回新的日期时间(“{$date1->year}-{$date1->month}-{$date1->day}”)
year}-{$date2->month}-{$date2->day});
}
至于降低NPath复杂性,一般来说:您必须减少可能的执行路径的数量。首先看一下福勒的重构书中关于重构的章节
顺便说一句,我想知道提高时间有什么好处?它能做本机DateTime API不能做的事情吗?如果没有,我为什么要使用它?排序函数必须返回-1,0,1,这是一个常见的误解。你能行
function compareDates($date1, $date2)
{
return strtotime("{$date1->year}-{$date1->month}-{$date1->day}")
- strtotime("{$date2->year}-{$date2->month}-{$date2->day}");
}
请注意,如果整数限制是一个问题,则可以使用不具有该限制的DateTime
,例如
function compareDates($date1, $date2)
{
return new DateTime("{$date1->year}-{$date1->month}-{$date1->day}")
< new DateTime("{$date2->year}-{$date2->month}-{$date2->day}");
}
函数比较($date1,$date2)
{
返回新的日期时间(“{$date1->year}-{$date1->month}-{$date1->day}”)
year}-{$date2->month}-{$date2->day});
}
至于降低NPath复杂性,一般来说:您必须减少可能的执行路径的数量。首先看一下福勒的重构书中关于重构的章节
顺便说一句,我想知道提高时间有什么好处?它能做本机DateTime API不能做的事情吗?如果不是,我为什么要使用它?我是PHP新手,这段代码不是也一样,只是简单而已
function compareDates($date1, $date2){
if(($date->year < $date2->year) || ($date->month < $date2->month) || ($date->day < $date2->day) {
return -1;
}
if($date->year > $date2->year) || ($date->month > $date2->month) || ($date->day > $date2->day) {
return 1;
}
// etc.. same for hour, minute, second.
return 0;
}
函数比较($date1,$date2){
如果($date->year<$date2->year)| |($date->month<$date2->month)|($date->day<$date2->day){
返回-1;
}
如果($date->year>$date2->year)| |($date->month>$date2->month)| |($date->day>$date2->day){
返回1;
}
//等等,小时,分钟,秒都一样。
返回0;
}
我是PHP新手,这段代码不是也一样,只是很简单吗
function compareDates($date1, $date2){
if(($date->year < $date2->year) || ($date->month < $date2->month) || ($date->day < $date2->day) {
return -1;
}
if($date->year > $date2->year) || ($date->month > $date2->month) || ($date->day > $date2->day) {
return 1;
}
// etc.. same for hour, minute, second.
return 0;
}
函数比较($date1,$date2){
如果($date->year<$date2->year)| |($date->month<$date2->month)|($date->day<$date2->day){
返回-1;
}
如果($date->year>$date2->year)| |($date->month>$date2->month)| |($date->day>$date2->day){
返回1;
}
//等等,小时,分钟,秒都一样。
返回0;
}
您的代码实际上相对简单,只是结构不好。我建议创建一个子函数,该函数接受两个参数并处理-1/1的返回,然后遍历一个字段数组进行检查,因为这会稍微容易一些,但是需要注意的是:
$compare_val = 0;
在文件顶部,然后更改对elseifs的后续if调用,只需更新$compare_val并在函数末尾返回它,而不是返回值。您的代码实际上相对简单,只是结构不好。我建议创建一个子函数,该子函数接受两个参数并处理-1/1,然后遍历一个字段数组进行检查,因为这会稍微容易一点,但要注意以下几点:
$compare_val = 0;
在文件顶部,然后更改对elseifs的后续if调用,而不是返回值,只需更新$compare_val并在函数末尾返回它。不,不需要。如果年份不同,则他不关心月份,因此他必须按照上面定义的顺序进行比较。不,是的esn不是。如果年份不同,那么他不关心月份,所以他必须按照上面定义的顺序进行比较。该框架是为交叉兼容性而设计的。就开发而言,我们正在与PHP A接口