Как я могу улучшить этот код? - PullRequest
1 голос
/ 05 мая 2011

У меня есть этот код:

<div class="boxContentScroll">
<?
    while($row=mysql_fetch_array($query, MYSQL_NUM)) {                                                                                                                              
    ?>
        <div class="boxAddCategory<? if($row[1]==1) echo "Yes"; else echo "No"; ?>">
            <div class="boxAddCategory1">
                <? echo $row[0]."<br />"; ?>
            </div>

            <div class="boxAddCategory2">                               
                <? 
                    if((isset($_SESSION['admin'])) && ($_SESSION['admin']==1)) {
                    ?>
                        <input type="checkbox" <? if($row[1]==1) echo "checked='checked'" ?> value="categories[]" />
                    <?
                    } else echo "&nbsp;" 
                ?>
            </div>
        </div>
    <?
    }
?>
</div>

но это не так хорошо читать это (просто посмотрите число ?> или <?). Что вы можете предложить, чтобы улучшить его? Спасибо

Ответы [ 6 ]

4 голосов
/ 05 мая 2011
  1. Если вы хотите, чтобы этот код запускался во всех средах, не используйте short_tags (<?). Но если вы запускаете это на своем собственном сервере, вы можете игнорировать это.

  2. Используйте PHP альтернативный синтаксис для структур управления. Это сделает его намного более читабельным.

  3. Не смешивайте бизнес-логику с логикой представления. Либо настройте свой собственный стек MVC, либо используйте шаблонизатор, если хотите.

1 голос
/ 05 мая 2011
<div class="boxContentScroll">
    <?php while($row=mysql_fetch_array($query, MYSQL_NUM)) : ?>                                                                                                                             
        <div class="boxAddCategory <?=($row[1] == 1 ? 'Yes' : 'No')?>">
            <div class="boxAddCategory1">
                <?=$row[0].'<br />'?>
            </div>

            <div class="boxAddCategory2">                               
                <?php if((isset($_SESSION['admin'])) && ($_SESSION['admin']==1)) : ?>
                <input type="checkbox" <?=($row[1]==1 ? 'checked="checked"' : '')?> value="categories[]" />
                <?php endif; ?>
            </div>
        </div>
    <?php endwhile; ?>
</div>
1 голос
/ 05 мая 2011

Каждый раз, когда вы находитесь в цикле, и у вас есть статическое условие для проверки следующим образом:

if((isset($_SESSION['admin'])) && ($_SESSION['admin']==1))

Определите его в переменной вне цикла.Если это не изменится в цикле, вам не нужно проверять каждый раз, только один раз.Это становится актуальным при выполнении ресурсоемких проверок и вызовов функций, которые не приведут к другому результату вне цикла.

1 голос
/ 05 мая 2011

Вы могли бы написать это:

<? if($row[1]==1) echo "Yes"; else echo "No"; ?>

как это:

<?= $row[1] == 1 ? 'Yes' : 'No' ?>

И вы можете заменить это:

if((isset($_SESSION['admin'])) && ($_SESSION['admin']==1)) {

с этим:

if ( $admin ) {

и поместите это перед циклом while:

$admin = isset($_SESSION['admin']) && $_SESSION['admin'] == 1;
1 голос
/ 05 мая 2011

Ну, я бы начал с замены, если с короткой версией:

<?php echo ($row[1]==1) ? "Yes" : "No"; ?>

0 голосов
/ 05 мая 2011

Использование HEREDOC:

<div class="boxContentScroll">
<?php
    while ($row=mysql_fetch_array($query, MYSQL_NUM)) {
        $class = ($row[1]==1) ? 'Yes' : 'No';
        $checked = ($class) ? 'checked="checked"' : '';
        $data = $row[0];
        $admin = (isset($_SESSION['admin']) && $_SESSION['admin']==1) ? 1 : 0;

        echo <<< HTML
    <div class="boxAddCategory{$class}">
        <div class="boxAddCategory1">
            {$data}
        </div>
HTML;
        if ($admin) {
            echo <<< HTML
        <div class="boxAddCategory2">
            <input type="checkbox" value="categories[]" {$checked} />
        </div>
HTML;
        }
        echo <<< HTML
    </div>
HTML;
    }
?>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...