有没有办法在PHP中更有效地做到这一点?

时间:2015-08-22 13:54:24

标签: php

首先,抱歉标题,我不知道如何描述我的问题。

我有以下代码(简化)。

if ($red && $italic)
    echo "<tr class='red italic'>";
elseif ($italic)
    echo "<tr class='italic'>";
elseif ($red)
    echo "<tr class='red'>";
else
    echo "<tr>";

有没有办法简化这一点,即不使用8行?我知道这不是很重要,但我想知道是否可能。

谢谢!

2 个答案:

答案 0 :(得分:2)

是的,你可以“简化”它。

echo '<tr' . ($red || $italic ? ' class="' . ($red ? 'red' : '') . ($italic ? ' italic' : '') . '"' : '') . '>';

如果您不担心发送空课程,可以缩减:

echo '<tr class="' . ($red ? 'red' : '') . ($italic ? ' italic' : '') . '">';

如果您愿意,可以在一行中编写整个应用程序。不过你呢?可读性非常重要。

如果您希望重写代码以减少重复次数,那么有很多选项。

此方法与原始行的行数相同,但允许您通过更改一个部分轻松添加另一个类

$classes = array('red', 'italic');
$used_classes = array();
foreach ($classes as $class) {
    if ($$class) {
        $used_classes[] = $class;
    }
}
echo '<tr class="' . join(' ', $used_classes) . '">';

答案 1 :(得分:0)

您可以使用开关。

$type = 'iandr';

switch ($type) {
    case iandr:
        echo'<tr class="red italic">';
       break;

    case i:
        echo'<tr class="italic">';
       break;

    case r:
        echo'<tr class="red">';
       break;

    default:
        code to be executed here if $type is different to the above cases.
}

我个人更喜欢使用开关而不是if和else语句。