我如何使条件相互依赖?

时间:2018-04-03 05:56:57

标签: php html if-statement

这是我的代码:

$user_rep = $_SESSION['login'] == 1 ? $_SESSION['user_rep'] : null;
$html  = '<div class="privileges-cases">';
$html .= '<span class="' . <?= !is_null($user_rep) && $user_rep >= 1   ? "half-opacity" : ""; ?> . '"></spam><i class="fa fa-check"></i>At least 1 reputation for asking/answring question</span>';
$html .= '<span class="' . <?= !is_null($user_rep) && $user_rep >= 15  ? "half-opacity" : ""; ?> . '"></spam><i class="fa fa-check"></i>At least 15 reputation for upvote</span>';
$html .= '<span class="' . <?= !is_null($user_rep) && $user_rep >= 50  ? "half-opacity" : ""; ?> . '"></spam><i class="fa fa-check"></i>At least 50 reputation for commenting</span>';
$html .= '<span class="' . <?= !is_null($user_rep) && $user_rep >= 125 ? "half-opacity" : ""; ?> . '"></spam><i class="fa fa-check"></i>At least 125 reputation for downvote</span>';     
$html .= '</div>';

正如您所看到的,它是所有用户权限的列表,我试图使当前用户无法访问的权限变得苍白。 (注意如果用户没有登录,我不想这样做)

我的代码也可以,但它让我感到困扰,它并不性感。我曾多次写!is_null($user_rep) (看起来很脏)以及其他一些最好依赖的条件,因为如果第一个是真的,那么就不需要别人了甚至被检查。

无论如何,我怎么能这样做?我的意思是我怎样才能让它变得更干净?

3 个答案:

答案 0 :(得分:0)

您可以设置为0而不是null。

Fragment View

答案 1 :(得分:0)

如果不修改你正在尝试做的事情的核心,我会创建一个关联的权限数组和它们所需的声誉,然后循环,设置或省略半不透明度类。这是一个有效的例子,请注意我设置了&#34;用户&#34;代表16:

Demo

$user_rep = $_SESSION['login'] == 1 ? $_SESSION['user_rep'] : null;

$privileges = array(
    'Asking/Answering Questions' => 1,
    'Upvote' => 15,
    'Comment' => 50,
    'Downvote' => 125
);

echo '<div class="privileges-cases">';
    foreach( $privileges as $privilege => $rep){
        if( $user_rep == null ){
            $class = 'half-opacity';
        } else {
            $class = $user_rep >= $rep ? '' : 'half-opacity';
        }

        echo "<span class=\"$class\"></span><i class=\"fa fa-check\"></i>At least $rep reputation for $privilege</span>";
    }
echo '</div>';

通过使用null比较移动值比较,您可以使其更简洁。无论哪种方式,它确实最有意义的是你现在如何将它布局,只是与所需的声誉进行比较。

这样的事情就像&#34;清洁&#34;因为我可以考虑制作你已经获得的代码。

$user_rep = $_SESSION['login'] == 1 ? $_SESSION['user_rep'] : null;

$privileges = array(
    1   => 'Asking/Answering Questions',
    15  => 'Upvote',
    50  => 'Comment',
    125 => 'Downvote'
);

echo '<div class="privileges-cases">';
    foreach( $privileges as $rep => $privilege ){
        $class = $user_rep < $rep ? 'half-opacity' : '';
        echo "<span class='$class'></span><i class='fa fa-check'></i>At least $rep reputation for $privilege</span>";
    }
echo '</div>';

答案 2 :(得分:-2)

您可以使用@ http://php.net/manual/en/language.operators.errorcontrol.php

无论何时进行检查

<?= @$user_rep >= 1 ? "half-opacity" : ""; ?>

@运算符将忽略该错误,即未定义的变量错误

重要 @运算符只会禁用代码当前行的错误。它不会隐藏您的php脚本生成的任何其他错误。