初始化可能未使用的类

时间:2015-05-26 06:52:30

标签: php class methods conditional

让我说我是一个类,但我的脚本中有条件,这可能意味着类方法实际上从未被使用过。

示例:

$rr = new RecipientRepo($db);

if ($_GET['action'] == 'test1') {
    $rr->showForm1();
}
else if ($_GET['action'] == 'test2') {
    $rr->showForm2();
}

如果没有满足条件,则永远不会调用类的方法。

这是不好的做法吗?我更倾向于在每个条件下初始化课程。

任何答案都将不胜感激。

2 个答案:

答案 0 :(得分:2)

仅在$_GET中设置密钥时才初始化类。你可以这样做 -

if (!empty($_GET['action'])) {

    $rr = new RecipientRepo($db);

    if ($_GET['action'] == 'test1') {
        $rr->showForm1();
    }
    else if ($_GET['action'] == 'test2') {
        $rr->showForm2();
    }

}

如果你想让它更具体,那么 -

if (!empty($_GET['action']) && in_array($_GET['action'], array('test1', 'test2'))) {

答案 1 :(得分:1)

如果初始化类是资源密集型的,则可以根据需要进行初始化。如果RecipientRepo对象与表单提交密切相关,您甚至可以在对象中添加静态方法以确定是否需要创建它:

public static function formPosted() {
  return (
    isset($_GET['action']) &&
    in_array($_GET['action'], array(
      'test1',
      'test2'
    ))
  );
}

然后,在您的主窗体中,您可以调用它来确定是否需要实例化对象:

if (RecipientRepo::formPosted()) {
  $rr = new RecipientRepo($db);
  if ($_GET['action'] == 'test1') {
    $rr->showForm1();
  }
  else if ($_GET['action'] == 'test2') {
    $rr->showForm2();
  }
}

在方法中包含此逻辑可确保在正确条件正确时实例化对象。它还封装了用于确定何时以易于阅读的结构执行此操作的逻辑。