我有两个几乎相同的函数,只是有一个变量的反转。我想知道如何在没有重复代码的情况下处理这个问题。
例如:
public static function getMajorRelative($tonality){
$result = array_search($tonality,self::$_minorTonalities);
return self::$_majorTonalities[$result];
}
和
public static function getMinorRelative($tonality){
$result = array_search($tonality,self::$_majorTonalities);
return self::$_minorTonalities[$result];
}
有人有过类似的概念问题吗?
谢谢,
Philippe
您可以始终传入要从中接收结果的数组:
public static function getRelative($tonality, $return_array) {
//If returning minor, search major; Else, search minor.
$array_to_search = ($return_array === self::$_minorTonalities ? self::$_majorTonalities : $_minorTonalities);
$result = array_search($tonality, $array_to_search);
return $return_array[$result];
}
两行相似(不完全相同)的代码并不是真正的重复,但您可以做到:
protected static function getRelative($tonality, $tonalities1, $tonalities2) {
$result = array_search($tonality, $tonalities1);
return $tonalities2[$result];
}
public static function getMajorRelative($tonality){
return self::getRelative($tonality, self::$_minorTonalities, self::$_majorTonalities);
}
public static function getMinorRelative($tonality){
return self::getRelative($tonality, self::$_majorTonalities, self::$_minorTonalities);
}
如果真的很重要
您可能还需要一些异常处理,以防$tonality的值在您的数组
我不确定还有什么需要改进的。但如果你想,你可以把它写成一个函数:
public static function getRelative($chord,$tonality)
{
$varName = '_'.($chord == 'major' ? 'major' : 'minor').'Tonalities';
$result = array_search($tonality,self::${$varName});
return self::${$varName}[$result];
}
你可以称之为:
getRelative('major',$tonality);
getRelative('minor',$tonality);