我怎样才能更好地使用此代码?

时间:2011-05-05 17:11:44

标签: php html tags

我有这段代码:

<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 个答案:

答案 0 :(得分:4)

  1. 如果您希望此代码在所有环境中运行,请不要使用short_tags(<?)。但是如果你在自己的服务器上运行它,你可以忽略它。

  2. 使用PHP的alternative syntax作为控制结构。这将使其更具可读性。

  3. 不要将您的业务逻辑与您的视图逻辑混合在一起。如果需要,可以设置自己的MVC堆栈或使用模板引擎。

答案 1 :(得分:1)

好吧,我会先用短版本替换:

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

答案 2 :(得分:1)

你可以这样写:

<? 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;

答案 3 :(得分:1)

任何时候你都在循环中并且有一个静态条件来检查这样:

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

在循环外的变量中定义它。如果它不会在循环内更改,则不必每次都检查一次。这在执行资源密集型检查和函数调用时变得相关,这些调用不会在循环外产生不同的结果。

答案 4 :(得分:1)

<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>

答案 5 :(得分:0)

使用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>