Есть ли эффективный способ написать этот оператор PHP if / else? - PullRequest
0 голосов
/ 12 января 2011

Я написал простой трекер проблем для своего веб-приложения. У меня есть некоторые комментарии, которые я хочу оставить приватными (их может видеть только роль «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 ]

3 голосов
/ 12 января 2011

Все, что вам нужно сделать, это инвертировать условие: комментарии видны, если они НЕ являются закрытыми или если $ 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; ?>
2 голосов
/ 12 января 2011

Вы можете просто инвертировать все выражение:

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

Или вы можете решить его, используя законы Де Моргана , к этому:

    !($is_private && 'root' != $role))
<=>  !$is_private || !('root' != $role)
<=>  !$is_private || 'root' == $role
1 голос
/ 12 января 2011
if (!$is_private || 'root' == $role):
0 голосов
/ 12 января 2011

лучше, я предполагаю, что вы имеете в виду более чистый код?

если да, поместите его в функцию и вызовите его.

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

    return false;
}
0 голосов
/ 12 января 2011

Это может быть неправильно, см. Обсуждение

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...