如何组织代码?

时间:2011-04-13 03:11:44

标签: php

<?php
if(arg(0)=="test"){
echo "code here";
}else{
echo '<div class="item-list">
  <?php if (!empty($title)) : ?>
    <h3><?php print $title; ?></h3>
  <?php endif; ?>
  <<?php print $options['type']; ?>>
    <?php foreach ($rows as $id => $row): ?>
      <li class="<?php print $classes[$id]; ?>"><?php print $row; ?></li>
    <?php endforeach; ?>
  </<?php print $options['type']; ?>>
</div>
';}

其他回声太长。有没有办法让它变小。

4 个答案:

答案 0 :(得分:3)

一般来说,这是错误的代码。您正在使用视图来处理业务逻辑。我肯定会使用一个非常简单的模板系统,如:

Simple and Fast Template Engine

这段代码无法维护,如果它变得更大,甚至可能会读到它。请帮助自己,并从观点中分离逻辑。

从上面的url看一下这个很好的例子,看看如何组织代码:

<?php    
require_once('template.php');    

$tpl = & new Template('./templates/');    
$tpl->set('title', 'User Profile');    

$profile = array(    
   'name' => 'Frank',    
   'email' => 'frank@bob.com',    
   'password' => 'ultra_secret'    
);    

$tpl->set_vars($profile);    

echo $tpl->fetch('profile.tpl.php');    
?>

The associated template looks like this:

<table cellpadding="3" border="0" cellspacing="1">    
   <tr>    
       <td>Name</td>    
       <td><?=$name;?></td>    
   </tr>    
   <tr>    
       <td>Email</td>    
       <td><?=$email;?></td>    
   </tr>    
   <tr>    
       <td>Password</td>    
       <td><?=$password;?></td>    
   </tr>    
</table>

And the parsed output is as follows:

<table cellpadding="3" border="0" cellspacing="1">    
 <tr>    
   <td>Name</td>    
   <td>Frank</td>    
 </tr>    
 <tr>    
   <td>Email</td>    
   <td>frank@bob.com</td>    
 </tr>    
 <tr>    
   <td>Password</td>    
   <td>ultra_secret</td>    
 </tr>    
</table>

答案 1 :(得分:1)

我很惊讶代码甚至可以运行。这是一种更好的方法,不使用echo:只需在生成html输出时关闭php解释器。

<?php
if(arg(0)=="test"){
echo "code here";
}else{
?>
<div class="item-list">
  <?php if (!empty($title)) : ?>
    <h3><?php print $title; ?></h3>
  <?php endif; ?>
  <<?php print $options['type']; ?>>
    <?php foreach ($rows as $id => $row): ?>
      <li class="<?php print $classes[$id]; ?>"><?php print $row; ?></li>
    <?php endforeach; ?>
  </<?php print $options['type']; ?>>
</div>
<?
}
?>

答案 2 :(得分:0)

<?php

$output = "<div class='item-list'>";
if(!empty($title)) $output .= "<h3>".$title."</h3>";
$output .= $options['type'];
foreach($rows as $id => $row) {
    $output .= '<li class="' . $classes[$id] . '">' . $row . '</li>';
}
$ouput .= $options['type'] . "</div>";

$output = (arg(0) == "test" ? "code here" : $output);
echo $output;

?>

答案 3 :(得分:-1)

如果你不在PHP和HTML上下文之间切换(也缩进 帮助),它看起来更好:

<?php
   if (arg(0)=="test") {
      echo "code here";
   }
   else {
      echo '<div class="item-list">'
         . @$title
         . "<$options[type]>";

      foreach ($rows as $id => $row) {
          print "<li class=\"{$classes[$id]}\">$row</li>";
      }

      echo "</$options[type]>";
  }