【问题标题】:Learning how to refactor PHP code学习如何重构 PHP 代码
【发布时间】:2012-10-26 23:09:13
【问题描述】:

我目前正在使用 PHP 5.2.9。有没有办法以更容易阅读和更好组织的方式重构这段代码?

  if ($is_read_only == true) {
      echo ($affiliate['affiliate_gender'] == 'm') ? MALE : FEMALE;
  } elseif ($error == true) {
      if ($entry_gender_error == true) {
            echo tep_draw_radio_field('a_gender', 'm', $male) . '  ' . MALE . '  ' . tep_draw_radio_field('a_gender', 'f', $female) . '  ' . FEMALE . ' ' . ENTRY_GENDER_ERROR;
      } else {
            echo ($a_gender == 'm') ? MALE : FEMALE;
            echo tep_draw_hidden_field('a_gender');
      }
  } else {
      echo tep_draw_radio_field('a_gender', 'm', $male) . '  ' . MALE . '  ' . tep_draw_radio_field('a_gender', 'f', $female) . '  ' . FEMALE . ' ' . ENTRY_GENDER_TEXT;
  }

【问题讨论】:

  • 我认为您的代码格式更好?此外,您的意思可能是 refactor 而不是 compress
  • 有时将代码隔开更容易阅读,最大的帮助是缩进嵌套部分。
  • 压缩通常会使其更难阅读。
  • 您希望通过减少代码行数获得什么好处?
  • 你可以从添加缩进开始。

标签: php


【解决方案1】:

您可以将 if ($is_read_only == true) 更改为 if ($is_read_only) 以及其他 if 语句,因为放置 '== true' 是多余且不必要的

【讨论】:

    【解决方案2】:

    我不知道你为什么希望它的行数更少,但你可以这样做:

    echo $is_read_only === true
    ?   $affiliate['affiliate_gender'] === 'm' ? MALE : FEMALE
    :   $error === true
    ?   $entry_gender_error == true
    ?   tep_draw_radio_field('a_gender', 'm', $male) . '  ' . MALE . '  ' . tep_draw_radio_field('a_gender', 'f', $female) . '  ' . FEMALE . ' ' . ENTRY_GENDER_ERROR
    :   ($a_gender === 'm' ? MALE : FEMALE) . tep_draw_hidden_field('a_gender')
    :   tep_draw_radio_field('a_gender', 'm', $male) . '  ' . MALE . '  ' . tep_draw_radio_field('a_gender', 'f', $female) . '  ' . FEMALE . ' ' . ENTRY_GENDER_TEXT;
    

    它肯定不是更具可读性。可读性和压缩似乎相互矛盾。

    编辑:

    对于其中的挑战,我走得更远了。

    echo $is_read_only
    ?   $affiliate['affiliate_gender'] === 'm' ? MALE : FEMALE
    :   $error && !$entry_gender_error
    ?   ($a_gender === 'm' ? MALE : FEMALE) . tep_draw_hidden_field('a_gender')
    :   tep_draw_radio_field('a_gender', 'm', $male) . '  ' . MALE . '  ' .
        tep_draw_radio_field('a_gender', 'f', $female) . '  ' . FEMALE . ' ' .
        ($error ? ENTRY_GENDER_ERROR : ENTRY_GENDER_TEXT);
    

    这是我作为人类所能做的最糟糕的事情。

    愿上帝怜悯我的灵魂:)

    【讨论】:

    • 天哪,我的眼睛在流血!让它停下来!
    • 哈哈!我喜欢。迷惑敌人! :P
    • +1 真正的艺术品。简洁,自我记录,优雅。我现在正在考虑我一直在使用的所有多余的换行符,但至少现在我看到了曙光!
    【解决方案3】:

    我更喜欢这样:

    if ($is_read_only)
        echo ($affiliate['affiliate_gender'] == 'm') ? MALE : FEMALE;
    elseif ($error)
        if ($entry_gender_error)
            echo tep_draw_radio_field('a_gender', 'm', $male) . '  ' . MALE.
                 '  ' . tep_draw_radio_field('a_gender', 'f', $female) .  
                 '  ' . FEMALE . ' ' . ENTRY_GENDER_ERROR;
        else
            echo ($a_gender == 'm') ? MALE : FEMALE , tep_draw_hidden_field('a_gender');
    else
        echo tep_draw_radio_field('a_gender', 'm', $male) . '  ' . MALE .
             '  ' . tep_draw_radio_field('a_gender', 'f', $female) .
             '  ' . FEMALE . ' ' . ENTRY_GENDER_TEXT;
    

    我避免使用太长的回声句子,以提高可读性。很多 {s 和 } 的结果也很混乱。

    【讨论】:

      【解决方案4】:

      这取决于您所说的“压缩”究竟是什么意思?

      由于您尚未澄清,因此您得到了基本答复。

      删除空格:

      如果您希望以某种方式加速您的代码,请不要打扰。压缩(缩小/删除空间)一个php文件不会加快它的执行时间。 PHP 每次都会读取文件,将其编译为字节码并运行它。这样做会让你的眼睛和你的同事一样流血。只是不要这样做!

      为了可读性/可用性:

      那么您最好将代码/类/函数相应地划分为有意义且易于阅读的块。这不仅会帮助您,还会帮助与您一起工作的人。使用设置缩进级别、间距/括号/嵌套样式等。

      代码性能:

      有无数种方法可以在视觉形式和代码性能方面改进代码(类/函数/循环/连接/语句) - 可以使用各种工具进行分析/测试。

      希望这有助于作为一个指针。

      【讨论】:

      • 我向 Nickhar 道歉,我使用了错误的术语 - 基本上是用类/函数查看第三点(代码性能),而不是迷失在多余的 if else if else 等......我想要更好地改进/优化。谢谢你的崩溃!
      • 在这种情况下,我将您指向这里作为起点:stackoverflow.com/questions/21133/…。你可以在这里问很多关于以这种方式执行事情的问题 - 或者 - 人们会做出回应!
      猜你喜欢
      • 2014-04-16
      • 2018-04-25
      • 2019-08-11
      • 1970-01-01
      • 2019-06-12
      • 2023-03-03
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多