首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP中完全面向对象的框架?

PHP中完全面向对象的框架?
EN

Stack Overflow用户
提问于 2018-03-20 23:52:41
回答 2查看 0关注 0票数 0

我想在PHP中创建一个100%面向对象的框架,完全没有过程编程,并且所有东西都是一个对象。很像Java,除了它将在PHP中完成。

应该使用任何现有设计模式(如MVC)的任何指向此功能的功能的指针?如何为数据库中的每个表创建对象是可能的,以及如何显示HTML模板等。

请不要链接到现有的框架,因为我想主要作为一个学习练习来做到这一点。

我想要的一些功能是:

  • 非常容易的CRUD页面生成
  • 基于AJAX的分页
  • 如果可能的话,基于Ajax的表单验证,或非常简单的表单验证
  • 可分表的表格
  • 能够使用PHP编辑HTML模板
EN

回答 2

Stack Overflow用户

发布于 2018-03-21 08:23:15

我列出了许多问题,所以让我指出我是如何处理它的。我也是面向对象的瘾君子,并且发现对象技术非常灵活和强大而优雅(如果正确的话)。

MVC - 是的,MVC是Web应用程序的标准。它是有据可查的,可以理解的模型。此外,它还在应用程序级别上进行了OOP在课堂级别上的操作,即保持事物分离。MVC的好处是拦截过滤器模式。它有助于附加过滤器,用于预处理和后处理请求和响应。常见的用途是记录请求,基准测试,访问检查,缓存等。

HTML模板也可以表示为对象。我将View对象与Smarty模板引擎结合使用。我发现这种技术极其灵活,快速且易于使用。表示视图的对象应实现__set方法,以便每个属性都被传播到Smarty模板中。另外__toString应该实现方法来支持视图嵌套。看例子:

代码语言:javascript
复制
$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

代码语言:javascript
复制
<div id="status-bar"> Hello {$username} </div>

内容view/page.tpl

代码语言:javascript
复制
<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后端会查找所有预先注册的消息。这样只有一个查询运行,返回所有请求的消息。

票数 0
EN

Stack Overflow用户

发布于 2018-03-21 09:50:04

考虑到构建一个良好的框架需要花费的时间,花时间研究一下你喜欢和厌恶现有解决方案的情况将会相形见绌。你甚至不需要看看php框架。Rails,Django等都是有原因的。

建立一个框架是有益的,但是你需要明确的计划和理解手头的任务,这就是研究进行的地方。你的问题的一些答案:

  • 是的,它应该使用MVC作为模型视图控制器范例很好地转化为Web应用程序的世界。
  • 要根据数据库表中的记录创建模型,请查看ORM和Active Record模式。现有的研究,我知道包括学说的实现,更多可以通过在这里搜索找到。
  • 对于AJAX相关的任何事情,我建议使用jQuery作为起点,因为它使得AJAX非常容易启动和运行。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档