gpt4 book ai didi

php - PHP 是否支持 MVP 模式?

转载 作者:可可西里 更新时间:2023-11-01 13:35:03 24 4
gpt4 key购买 nike

有很多使用 ASP.NET 解释 MVP 模式的示例,但没有找到任何使用 PHP 的示例。

我是 PHP 程序员,想知道从哪里可以获得 MVP 模式 PHP 示例?

最佳答案

简短的回答是:是的 PHP 可以

(注意,它不完全是原始论文中描述的 MVP,而是 web 的变体)

MVC 和 MVP 之间的区别在于, View 是完全被动的并且不知道模型层。在 MVC 中,它不是被动的并且知道模型层。在适当的 MVP 中,View 类(如果是)也不应实现构造函数。

一个典型的 MVP 示例将由以下部分组成:

  1. 数据访问层(DataMappers、ORM 等)
  2. 业务逻辑(如验证和计算)
  3. 被动 View 类(它可以是一个模板,但最好坚持一个类)
  4. 连接模型和 View 的呈现器

一个例子,如何用PHP实现Model-View-Presenter

<子>注意:真实场景中的模型不是类,而是抽象层,包含很多处理应用程序逻辑的类。出于演示目的,我将其称为“模型”。

class Model
{
public function getSomeStuff()
{
return array('foo' => 'bar');
}
}


class View
{
public function render($path, array $vars = array())
{
ob_start();
extract($vars);
require($path);
return ob_get_clean();
}
}



class Presenter
{
private $model;

private $view;

public function __construct(Model $model, View $view)
{
$this->model = $model;
$this->view = $view;
}

public function indexAction()
{
$data = $this->model->getSomeStuff();

// Variables are set now, render the HTML
// And returns as a string
return $this->view->render('path/to/template.phtml', $data);
}
}

文件:template.phtml

<!DOCTYPE html>
<html>
<head>
<title>...</title>
</head>

<body>

<?php foreach($vars as $key => $value): ?>
<p><?php echo $key; ?> : <?php echo $value; ?></p>
<?php endforeach; ?>

</body>
</html>

用法是:

$model   = new Model();
$view = new View();

$presenter = new Presenter($service, $view);

echo $presenter->indexAction();

请注意,这是一个非常简化的示例。在现实场景中,任何基于 MVP 的应用程序应该还实现诸如路由器、SPL 类自动加载器之类的东西。

关于php - PHP 是否支持 MVP 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4530023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com