Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用分层PHP/HTML设计?是这样吗?_Php_Html_Coding Style_Standards_Codeigniter - Fatal编程技术网

使用分层PHP/HTML设计?是这样吗?

使用分层PHP/HTML设计?是这样吗?,php,html,coding-style,standards,codeigniter,Php,Html,Coding Style,Standards,Codeigniter,我在某个地方读到,你应该把你的网页分成3层:获取、逻辑、表示 获取:从数据库/会话等获取信息 逻辑:计算你需要什么 演示:显示HTML 首先,这是个好主意吗?我可以看到一些明显的好处(组织,易于修改)。第二,鉴于这个模型呼应出HTML是不好的,我应该将想要的HTML存储在变量中吗 例如: <?php /** fetch **/ include("session_validator.php"); $secret = $_GET['secret']; mysql_connect($h

我在某个地方读到,你应该把你的网页分成3层:获取、逻辑、表示

  • 获取:从数据库/会话等获取信息
  • 逻辑:计算你需要什么
  • 演示:显示HTML
首先,这是个好主意吗?我可以看到一些明显的好处(组织,易于修改)。第二,鉴于这个模型呼应出HTML是不好的,我应该将想要的HTML存储在变量中吗

例如:

<?php

/** fetch **/
include("session_validator.php");

$secret = $_GET['secret'];

mysql_connect($host, $user, $pass);
// connect and query
$username = mysql_result($result, 0, 'username');

/** logic **/
if (isset($secret)) {
    $message = "You know the secret!";
} else {
    $message = "The secret is wrong";
}

/** presentation **/
?>
<html>
<body>
    Username: <?php echo $username; ?> <br>
    Secret? <?php echo $message; ?>
</body>
</html>

用户名:
秘密

重申我的问题,在演示之前将我的信息存储在
$message
中并关闭
PHP
部分是一个好主意吗?还是我误解了整个分层概念?

这种设计通常被称为MVC(模型-视图-控制器),它与您描述的有点不同:

  • 控制器-接收请求并处理请求的部件。它同时调用模型和视图
  • 模型-逻辑部分,这是繁重的PHP编码将发挥作用的地方。这是从数据库/文件中获取信息、进行计算,然后将数据返回到控制器的部分
  • 视图-应用程序的表示部分,通常它主要包含HTML(和/或其他客户端语言),它是呈现给客户端的页面。控制器将数据从模型传递给它,然后它可以被解析(视图通常允许PHP代码在其中)并显示

我认为这是一个很好的模式,因为它允许清晰的分离和易于维护。它还允许您在前端和后端之间分离工作(特别是如果您的每一方都有不同的开发人员!)

至于回显部分,回显HTML的唯一位置是在视图中,因此没有问题


我建议您查看一个有良好文档记录的框架(如),然后开始阅读。

此设计通常被称为MVC(模型视图控制器),它与您描述的有点不同:

  • 控制器-接收请求并处理请求的部件。它同时调用模型和视图
  • 模型-逻辑部分,这是繁重的PHP编码将发挥作用的地方。这是从数据库/文件中获取信息、进行计算,然后将数据返回到控制器的部分
  • 视图-应用程序的表示部分,通常它主要包含HTML(和/或其他客户端语言),它是呈现给客户端的页面。控制器将数据从模型传递给它,然后它可以被解析(视图通常允许PHP代码在其中)并显示

我认为这是一个很好的模式,因为它允许清晰的分离和易于维护。它还允许您在前端和后端之间分离工作(特别是如果您的每一方都有不同的开发人员!)

至于回显部分,回显HTML的唯一位置是在视图中,因此没有问题


我建议你看看一个有良好文档记录的框架(例如),然后开始阅读。

这是一种有效的方法。但是,当您在HTML中输出变量时,应该确保正确地转义它。直接从PHP执行这项操作意味着使用htmlentities()。我建议您围绕它编写一个包装函数,因为它需要的参数有点繁琐

您还可以使用诸如Twig或Smarty之类的模板引擎,这通常会使转义更容易,并提供用于处理布局的结构

然而,你的方法没有错。只要在实际代码和显示逻辑之间有一个明确的分离,您就不会在将来遇到太多麻烦。您可以将HTML部分移动到一个单独的文件中,并将其从另一个页面包括进来,以使分离更加清晰


我自己使用框架,但如果你还在学习,保持它的简单并不是一件坏事。

这是一种有效的方法。但是,当您在HTML中输出变量时,应该确保正确地转义它。直接从PHP执行这项操作意味着使用htmlentities()。我建议您围绕它编写一个包装函数,因为它需要的参数有点繁琐

您还可以使用诸如Twig或Smarty之类的模板引擎,这通常会使转义更容易,并提供用于处理布局的结构

然而,你的方法没有错。只要在实际代码和显示逻辑之间有一个明确的分离,您就不会在将来遇到太多麻烦。您可以将HTML部分移动到一个单独的文件中,并将其从另一个页面包括进来,以使分离更加清晰


我自己使用框架,但如果你还在学习,保持简单并不是一件坏事。

我个人使用一个面向对象的php框架来处理所有正在进行的任务,这使得接收请求的页面只有5行(大约)长。这样做更好,因为这样以后您就可以关注视图,并将所有代码放在同一个位置,这样您就不必到处寻找它


但是请相信我,当我这么说的时候,每个程序员都有自己不同的方法,这样做就不会有错误的方法。

我个人使用一个面向对象的php框架来处理所有正在进行的任务,这使得接收请求的页面只有5行(大约)长。这样做更好,因为这样以后您就可以关注您的视图,并将所有代码放在同一个pla中