多参数的一种方法或一种参数的多种方法?

时间:2011-10-18 17:07:48

标签: php oop function methods

想象一下用于跟踪对手之间游戏的“游戏”类。使用1种方法根据用户输入参数检索游戏是否更好OOP,或者更好地使用特定于检索目标的多种方法?

class Games {
  function get_games($game_id = NULL, $stadium_id = NULL, $start_date = NULL,   
      $end_date = NULL, $count = 999); {}
}

VS

class Games {
  function get_all_games($count = 999); {}
  function get_game_by_id($game_id = 1); {}
  function get_games_by_stadium($stadium_id = 1); {}
  function get_games_by_dates($start_date = NULL; $end_date = NULL) {}
}

益处的解释和任何编码/ snytax提示将不胜感激。感谢。

5 个答案:

答案 0 :(得分:2)

我越练习OOP越多,我发现自己遵循将参数传递给方法的规则。有点像嵌套if语句的多层次,我发现如果我有两个以上的话,我可能会做错事。

保持代码简单。你正在编写一个做某事的方法,而不是一个完成所有事情的程序代码块。如果你想要一个游戏,那就去玩游戏吧。如果您想获得日期范围的列表,请执行此操作。

但是我会指出你真的不需要get_all_games() - 你可以只允许传递get_games_by_dates()而没有参数。如果它没有得到任何东西,它将永远(所有游戏)的每个日期得到游戏

答案 1 :(得分:1)

我总是在OOP代码方面犯错误。原因是它使您的代码更易于维护和阅读。您拥有的功能越多,越容易在以后跟踪代码

答案 2 :(得分:0)

我会使用单独的方法,因为你使用了许多带默认值的参数。

如果你想要获得所有游戏,你需要做的事情:

$games->get_games(NULL, NULL, NULL, NULL, 999);

答案 3 :(得分:0)

假设你的get_....()函数正在返回所有游戏数据,我会编写一个函数来根据传入的id返回这些数据,然后编写一系列find_...()函数来返回找到的数组。这样做的另一个好处是可以更容易地覆盖后代类中的数据检索代码。

class Games {
    public function get_game($game_id) {
        // Return game details (array/object) for $game_id, or FALSE if not found.
    }

    public function find_all_games() {
        // Return array of ids for all games.
    }

    public function find_games_by_dates($start_date = NULL, $end_date = NULL) {
        // Return array of ids between $start_date and $end_date unless NULL.
    }
}

然后你可以打电话:

$oGames = new Games() ;
$aGames = $oGames->find_all_games() ;
foreach($aGames as $id) {
    $aGame = $oGames->get_game($id) ;
    if($aGame !== FALSE) {  // This check might be skipped if you trust the array of ids from find_all_games().
        // Assuming an array is returned.
        echo "Game Found: ".$aGame['name']."\n" ;
    }
}

答案 4 :(得分:0)

“特定于检索目标的多种方法”的好处是您可以添加/删除目标。使用一个单片函数和一堆参数的问题在于,如果您决定添加/删除获取游戏的方法,则必须更改界面。这将破坏使用它的任何代码。

每个方法都应尽可能简洁,只执行一个功能。