关于更清洁的方式写这篇文章的建议

时间:2014-02-04 23:04:23

标签: php foreach while-loop

所以下面的代码有效,它正在做我想要它做的一切。然而,当我退后一步时,它似乎是一个过于复杂的方法,可以说是php中最常见的任务之一。

我对php有足够的了解,以便在我看到它们时弄清楚大多数事情正在做什么,并创建一些相当难看的代码,就像你将在下面看到的那样;然而,更好的点逃避了我。

我希望如果有人有空闲时间,他/她可以看一遍,并向我展示一个更简洁的方法来解决这个问题。

<?php 

$result = mysql_query('SELECT * FROM events'); 
$i = 1; 

while ($row = mysql_fetch_assoc($result)) {

    echo '<div id="item_gallery_s'.$i .'"'. 'class="fluid profileImgWrap goldDiagGrad">' .
         '<div class="profile_name">' . $row['name'] . '<br /><span class="profile_date">' .
         '<a href="http:#" 
             target="_blank"
             title="some title">' . $row['place'] . 
         '</a></span></div><!-- DCD Diva Name -->' .

         '<a rel="events[events]" 
             href="#">' .
         '<div class="profile_banner">Custom Banner</div><!-- Banner -->' .
         '<img src='.'"img/upload/'.$row['icon']. 
         '"' . 
         'alt="image description |'.$row['name']. 
         '"/>' . 
         '<!-- Photo --></a></div><!-- END #item_gallery_s'.$i .'-->';

        $i++;   
}?>

4 个答案:

答案 0 :(得分:0)

这就是“简洁”。

你不能在里面使用回声。并使用php短标签。

while ($row = mysql_fetch_assoc($result)) {
?>
<a href="http:#" target="_blank" title="some title"><?=$row['place'];?></a>
<?php
}
?>

“清理”的另一种方法是使用模板引擎,但再一次只用于HTML部分。

<a href="http:#" target="_blank" title="some title">{place}</a>

良好的编码!

答案 1 :(得分:0)

循环本身很好,但你会发现HTML-in-strings的不同意见。在过去的七年里,我鼓励我的团队使用带有php标签的HTML,或者我们依赖于完整的模板系统:

<?php while ($row = mysql_fetch_assoc($result)): ?>
    <div><?= $row['something'] ?></div>
<?php endwhile ?>

虽然我们为更清晰的代码启用了短标签。这样做的好处是它更干净 - 更少报价,逃避问题,IDE将能够突出显示html语法。大多数人在引用内容时将html视为字符串。

答案 2 :(得分:0)

你可以通过散布实际的HTML来清理它,而不是简单地回应它:

<?php 
$result = mysql_query('SELECT * FROM events'); 
$i = 1; 

while ($row = mysql_fetch_assoc($result)) {
?>
<div id="item_gallery_s<?php echo $i; ?>" class="fluid profileImgWrap goldDiagGrad">
    <div class="profile_name">
        <?php echo $row['name']; ?>
        <br />
        <span class="profile_date"><a href="http:#" target="_blank" title="some title"><?php echo $row['place']; ?></a></span>
    </div><!-- DCD Diva Name -->
    <a rel="events[events]" href="#"><div class="profile_banner">Custom Banner</div><!-- Banner -->
    <img src="img/upload/<?php echo $row['icon']; ?>" alt="image description |<?php echo $row['name']; ?>"/><!-- Photo --></a>
</div><!-- END #item_gallery_s<?php echo $i; ?> -->
<?php
    $i++;   
}?>

另一种选择,取决于您需要做多少工作,将是一个完整的模板引擎,如Smarty

答案 3 :(得分:0)

以下是我将如何格式化此代码(作为个人风格):

<?php 

$result = mysql_query('SELECT * FROM events'); 
$i = 1; 

while ($row = mysql_fetch_assoc($result)) {

  echo 
   '<div id="item_gallery_s'.$i.'" class="fluid profileImgWrap goldDiagGrad">
     <div class="profile_name">' . $row['name'] . '<br /><span class="profile_date">
       <a href="http:#" target="_blank" title="some title">' . $row['place'] . 
       '</a></span>
     </div><!-- DCD Diva Name -->

     <a rel="events[events]" href="#">
       <div class="profile_banner">Custom Banner</div><!-- Banner -->
       <img src="img/upload/' . $row['icon']. '" 
          alt="image description |' . $row['name']. '"/> 
          <!-- Photo -->
     </a>
   </div><!-- END #item_gallery_s'.$i .'-->';

   $i++;   
}
?>

还要尝试使用一致的缩进,以便轻松判断哪些内容与之匹配。顺便说一下,<div>(内联元素)中的<a>(块元素)是不好的形式。你的意思是使用<span>吗?学习使用W3C验证器来获取这些东西。