我想在PHP中创建一个100%面向对象的框架,完全没有过程编程,并且所有东西都是一个对象。很像Java,除了它将在PHP中完成。
应该使用任何现有设计模式(如MVC)的任何指向此功能的功能的指针?如何为数据库中的每个表创建对象是可能的,以及如何显示HTML模板等。
请不要链接到现有的框架,因为我想主要作为一个学习练习来做到这一点。
我想要的一些功能是:
发布于 2018-03-21 08:23:15
我列出了许多问题,所以让我指出我是如何处理它的。我也是面向对象的瘾君子,并且发现对象技术非常灵活和强大而优雅(如果正确的话)。
MVC - 是的,MVC是Web应用程序的标准。它是有据可查的,可以理解的模型。此外,它还在应用程序级别上进行了OOP在课堂级别上的操作,即保持事物分离。MVC的好处是拦截过滤器模式。它有助于附加过滤器,用于预处理和后处理请求和响应。常见的用途是记录请求,基准测试,访问检查,缓存等。
HTML模板也可以表示为对象。我将View对象与Smarty模板引擎结合使用。我发现这种技术极其灵活,快速且易于使用。表示视图的对象应实现__set
方法,以便每个属性都被传播到Smarty模板中。另外__toString
应该实现方法来支持视图嵌套。看例子:
$s = new View();
$s->template = 'view/status-bar.tpl';
$s->username = "John Doe";
$page = new View();
$page->template = 'view/page.tpl';
$page->statusBar = $s;
echo $page;
内容view/status-bar.tpl
:
<div id="status-bar"> Hello {$username} </div>
内容view/page.tpl
:
<html>
<head>....</head>
<body>
<ul id="main-menu">.....</ul>
{$statusBar}
... rest of the page ...
</body>
</html>
这样你只需要echo $page
和内部视图(状态栏)就会自动转换成HTML。顺便说一下,使用拦截过滤器之一,你可以用HTML页脚和页眉包装返回的视图,因此你不必担心从控制器返回完整页面。
在设计时,是否使用Ajax的问题不应该很重要。该框架应该足够灵活以便本机支持Ajax。
表单验证绝对是可以用OO方式完成的事情。使用复合模式构建复杂的验证器对象。复合验证器应该遍历表单域并分配简单的验证器并给你Yes / No答案。它也应该返回错误消息,以便您可以更新表单(通过Ajax或页面重新加载)。
另一个便利的元素是自动翻译类,用于在db中更改数据以适合用户界面。例如,如果db中的INT(1)字段表示布尔状态,并使用HTML中的复选框来导致空字符串或"on"
_POST或_GET数组,则不能将其分配给另一个。拥有将数据修改为适合View或for db的翻译服务是清理数据的一种干净方式。而且,即使在非常复杂的转换过程中,转换类的复杂性也不会浪费您的控制器代码。
同时国际化的问题可以使用面向对象技术来解决。我喜欢使用__
函数(双下划线)来获取本地化的消息。该函数不是执行查找和返回消息,而是为我提供了一个代理对象并预先注册了消息以供以后查找。一旦代理对象被推入View AND View被转换为HTML,i18n后端会查找所有预先注册的消息。这样只有一个查询运行,返回所有请求的消息。
https://stackoverflow.com/questions/-100003202
复制相似问题