Php 初始化可能无法使用的类

Php 初始化可能无法使用的类,php,class,methods,conditional,Php,Class,Methods,Conditional,让我们假设我初始化了一个类,但是我的脚本中有条件,这可能意味着类方法实际上从未被使用过 例如: $rr = new RecipientRepo($db); if ($_GET['action'] == 'test1') { $rr->showForm1(); } else if ($_GET['action'] == 'test2') { $rr->showForm2(); } 如果不满足该条件,则永远不会调用该类的方法 这是一种糟糕的做法吗?我更喜欢在每个条件下

让我们假设我初始化了一个类,但是我的脚本中有条件,这可能意味着类方法实际上从未被使用过

例如:

$rr = new RecipientRepo($db);

if ($_GET['action'] == 'test1') {
    $rr->showForm1();
}
else if ($_GET['action'] == 'test2') {
    $rr->showForm2();
}
如果不满足该条件,则永远不会调用该类的方法

这是一种糟糕的做法吗?我更喜欢在每个条件下初始化类


任何答案都将不胜感激。

只有在
$\u 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'))) {

如果初始化类是资源密集型的,则可以根据需要对其进行初始化。如果
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();
  }
}

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

Meh。管理仅在需要时正确实例化正确实体的复杂性可能很容易超过始终实例化您可能需要的所有内容的复杂性。初始化代码有多复杂?如果不是很贵,不用担心。