有没有一种有效的方法来编写这个PHP if / else语句?

时间:2011-01-12 20:39:59

标签: php logic if-statement

我为我的网络应用编写了一个简单的问题跟踪器。我有一些意见,我想保持私密(只有'root'的角色可以看到它们)。有没有更好的方法来编写以下内容,所以我不需要空 else 部分?

$ role 'root'或其他一些值 如果评论是私人的话, $ is_private true

<?php
// Don't show private comments to non-root users
if ($is_private && 'root' != $role):
    // NON Root cannot see private
else:
?>
<div class="comment <?= $is_private ? 'private' : '' ; ?>">
    <div class="comment-meta toolbar">
    <?= $is_private ? 'PRIVATE - ': ''; ?>
    <span class="datestamp"><?= $created_at; ?></span> - 
    <span class="fullname"><?= $fname . ' ' . $lname; ?></span></div>
    <p class="content"><?= nl2br($body); ?></p>

</div>
<?php endif; ?>

5 个答案:

答案 0 :(得分:3)

您需要做的就是反转条件:如果注释不是私有的,或者$ role是'root',则注释可见。

<?php
// Don't show private comments to non-root users
if (!$is_private || 'root' == $role):
?>
<div class="comment <?= $is_private ? 'private' : '' ; ?>">
    <div class="comment-meta toolbar">
    <?= $is_private ? 'PRIVATE - ': ''; ?>
    <span class="datestamp"><?= $created_at; ?></span> - 
    <span class="fullname"><?= $fname . ' ' . $lname; ?></span></div>
    <p class="content"><?= nl2br($body); ?></p>

</div>
<?php endif; ?>

答案 1 :(得分:2)

你可以简单地反转整个表达式:

if (!($is_private && 'root' != $role))

或者您使用De Morgan’s laws解决此问题:

    !($is_private && 'root' != $role))
<=>  !$is_private || !('root' != $role)
<=>  !$is_private || 'root' == $role

答案 2 :(得分:1)

if (!$is_private || 'root' == $role):

答案 3 :(得分:0)

这可能是错的,请参阅讨论

if ($is_private && 'root' == $role):

答案 4 :(得分:-1)

更好的我假设你的代码更清晰?

如果是这样的话,把它放在一个函数中并调用它。

function showPrivateComment($is_private, $role)
{
    if($is_private && $role == 'root')
        return true;
    elseif(!$is_private)
        return true;

    return false;
}