【问题标题】:Initialize a class that may not be utilized [closed]初始化一个可能无法使用的类[关闭]
【发布时间】:2015-05-26 06:52:30
【问题描述】:

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

例子:

$rr = new RecipientRepo($db);

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

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

这是不好的做法吗?我更喜欢在每个条件下初始化类。

任何答案将不胜感激。

【问题讨论】:

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

标签: php class methods conditional


【解决方案1】:

仅当在$_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'))) {

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-07-16
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 2011-04-03
      • 2019-03-11
      相关资源
      最近更新 更多