逻辑和标记、html和php

逻辑和标记、html和php,php,Php,我正在学习php。我看到人们建议将html和php或逻辑和标记分开。但在某些特定的场合,我不知道如何做到这一点。为了可读性和可维护性,我尝试将所有php放在一个单独的文件中,但现在我必须从数据库下载一个标题,我看到的唯一方法是将其与html的其余部分以及html和php的混合放在一起。在这种情况下,是否有一种更干净、更有条理的方式?将php的这种和平放在“设计”文件中可以吗?我可以或者应该把这个php代码和php的其余部分放在一起吗 <?php include("../../externs

我正在学习php。我看到人们建议将html和php或逻辑和标记分开。但在某些特定的场合,我不知道如何做到这一点。为了可读性和可维护性,我尝试将所有php放在一个单独的文件中,但现在我必须从数据库下载一个标题,我看到的唯一方法是将其与html的其余部分以及html和php的混合放在一起。在这种情况下,是否有一种更干净、更有条理的方式?将php的这种和平放在“设计”文件中可以吗?我可以或者应该把这个php代码和php的其余部分放在一起吗

<?php
include("../../externs/includes/connexio.php");

$result = mysqli_query($con, "SELECT * FROM myTable");

while ($row = mysqli_fetch_array($result)) {
    $id = $row["id"];
    $title = $row["title"];
    $subtitle = $row["subtitle"];
?>  

<div class="title" id="<?php echo $id; ?>"><?php echo $title; ?> </div>
<div class="subtitle"><?php echo $subtitle;?> </div>
<br>

<?php 
}//end while items
?>


以下是将PHP与标记混合时可以遵循的最佳实践

(不是最佳做法)

1) 例如,如果您在顶部有一个逻辑,并且希望生成标记,那么一个不太好的方法是:

<?php
$query = mysql_query("SELECT id,name FROM table");

while($row = mysql_fetch_assoc($query)){
    $id   = $row['id'];
    $name = $row['name'];
?>

<div>ID:<?php echo $id;?></div>
<div>NAME:<?php echo $name;?></div>

<?php
}
?>

使用这种格式可以获得令人满意的结果。尝试分离或避免将过多的PHP与标记混合。如果您希望表示逻辑与业务逻辑分离,那么我建议您使用MVC模型,因为它增加了可读性和可维护性。

首先,我建议您阅读有关MVC(模型视图控制器)的文章,您可以从这篇维基百科文章开始:

对于一个简单的例子,比如你的问题,在我看来,你的解决方案是最好的。其他任何事情都会增加不必要的复杂性

话虽如此,我将尝试使用这个简单的案例,并提供一种可能的方法来将逻辑与表示分离,希望一些基本概念将从中变得清晰

my_controller.php

include("../../externs/includes/connexio.php");

$result = mysqli_query($con, "SELECT * FROM myTable");

$myList = array();
while ($row = mysqli_fetch_array($result)) 
{
    $myList[] = $row;
}

// Now load the view.
include "my_view.php";
<?php foreach ($myList as $row ) : ?>

    <div class="title" id="<?php echo $row['id']; ?>"><?php echo $row['title']; ?></div>
    <div class="subtitle"><?php echo $row['subtitle'];?></div>
    <br>

<?php endforeach; ?>
my_view.php

include("../../externs/includes/connexio.php");

$result = mysqli_query($con, "SELECT * FROM myTable");

$myList = array();
while ($row = mysqli_fetch_array($result)) 
{
    $myList[] = $row;
}

// Now load the view.
include "my_view.php";
<?php foreach ($myList as $row ) : ?>

    <div class="title" id="<?php echo $row['id']; ?>"><?php echo $row['title']; ?></div>
    <div class="subtitle"><?php echo $row['subtitle'];?></div>
    <br>

<?php endforeach; ?>
myu model.php
文件中的
fetchData()
函数基本上与上面的
myu controller.php
相同

一个非常有争议且确实存在争议的问题是,在视图中包含任何PHP代码是否是一种好的做法。一些人认为应该使用其他模板语言,如Smarty。我的观点是,通过添加另一种语言来更改语法并不能改变不可避免的事实,即视图中需要一些逻辑,否则您将无法为应用程序引入动态性


当您在阅读PHP代码时感觉更加舒适,您将能够查看周围的几个框架,并了解它们是如何做到这一点的。它们的一个共同点是,它们在表示层中都有一些逻辑,无论是PHP还是其他

我看这里没有什么问题,我想还是可以的。没有问题。它起作用了。我的问题是:有没有更好的方法?我可以/应该分离html和php吗?通过将逻辑放在不同的文件中,并将其包含在html中,您始终可以将php代码从html上下文中分离出来file@justrohu:包含的文件应该有混合html和php的代码,就像我提供的示例一样?这里您可以将mysql获取代码分成不同的文件和写入不同的视图逻辑来显示获取的结果。通过这种方式,php代码变得易于维护。感谢您的解释,并努力使用相同的代码。现在我更明白了。
<?php foreach ($myList as $row ) : ?>

    <div class="title" id="<?php echo $row['id']; ?>"><?php echo $row['title']; ?></div>
    <div class="subtitle"><?php echo $row['subtitle'];?></div>
    <br>

<?php endforeach; ?>
include "my_model.php";
$myList = fetchData();
include "my_view.php;