HTML应该在面向对象的PHP设计中呈现在哪里?

时间:2011-01-18 17:10:46

标签: php oop

使用面向对象的PHP,HTML应该呈现在哪里?

业务流程包括几项维护客户记录的行动 每个业务流程的呈现是否应该获得单独的PHP文件?即。 viewCustomerTransactions.php?

这样的代码应该在哪里?

$custTrans = Customer.getTransactions();

foreach ($custTrans as $ct){
     $amount = $ct[0];
     $date = $ct[1];
     $product = $ct[2];

     echo '<div class="custTrans">';
         echo '<span class="custTransAmount">'.$amount.'</span>';
         echo '<span class="custTransDate">'.$date.'</span>';
         echo '<span class="custTransproduct">'.$product.'</span>';
     echo '</div>';
}

也许像codeigniter这样的MVC框架会更好?

3 个答案:

答案 0 :(得分:4)

我还在弄清楚什么是保持php和布局分离而没有太多模糊的最佳方法。目前我非常喜欢包含模板的方法,因为它非常简单并且没有任何限制。

因此,对于您的示例,您将拥有一个如下所示的php文件(example.php):

<?php
$custTrans = Customer.getTransactions();

$displ_transactions = array();

foreach ($custTrans as $ct){
     $transaction = array(
         'amount' => $ct[0],
         'date' => $ct[1];
         'product' => $ct[2];
     );
     $displ_transactions[] = $transaction; // this will push the transacion into the array
}
include 'example.tpl.php'
?>

然后你需要第二个文件(example.tpl.php):

<?php foreach ($displ_transactions as $transaction) { ?>
     <div class="custTrans">
         <span class='custTransAmount'><?php echo $transaction['amount'] ?></span>;
         <span class='custTransDate'><?php echo $transaction['date'] ?></span>;
         <span class='custTransproduct'><?php echo $transaction['product'] ?></span>;
     </div>
<?php } ?>

只需在浏览器中调用example.php,您就会看到与之前相同的结果。 这对小型网站来说都很好,因为这种方法会产生一些开销。如果你认真对待模板,请使用smarty。它易于学习,并且具有自动缓存功能,因此速度非常快。

我只是意识到你也可以这样做:

使用example.php:

<?php
$custTrans = Customer.getTransactions();

foreach ($custTrans as $ct){
     $amount = $ct[0];
     $date = $ct[1];
     $product = $ct[2];
     include 'example.tpl.php';
}
?>

example.tpl.php:

 <div class="custTrans">
     <span class='custTransAmount'><?php echo $amount ?></span>;
     <span class='custTransDate'><?php echo $date ?></span>;
     <span class='custTransproduct'><?php echo $product ?></span>;
 </div>

使用最适合你的东西:)

答案 1 :(得分:1)

如果我是你,我会将html存储在变量中,而不是像这样回显:

$custTrans = Customer.getTransactions();

$html = "";
foreach ($custTrans as $ct){
     $amount  = $ct[0];
     $date    = $ct[1];
     $product = $ct[2];

     $html .= "<div class="custTrans">";
         $html .= "<span class='custTransAmount'>".$amount."</span>";
         $html .= "<span class='custTransDate'>".$date."</span>";
         $html .= "<span class='custTransproduct'>".$product."</span>";
     $html .= "</div>";
}

然后你将这个html数据存储在变量$ html中,你可以随心所欲地回应它。

echo $html;

这能解决你的问题吗?

W上。

答案 2 :(得分:0)

我必须确认包含模板(由Jules Colle提到)是答案之一,但是,当项目太大时,维护可能会变得混乱,因此请记住要记录包含的文件通过什么文件,因为(目前)没有(免费)IDE解决方案来解决这种类型的链接...这种解决方案可以轻松地将您从一个文件转移到另一个文件,或者只是将所有内容布置成类似过程的代码。 / p>

编辑: 不要忘记魔法常数: http://www.php.net/manual/en/language.constants.predefined.php

并且: $ _SERVER [&#39; DOCUMENT_ROOT&#39;]