【问题标题】:Custom PHP Framework Feedback自定义 PHP 框架反馈
【发布时间】:2010-05-21 20:35:59
【问题描述】:

我已经学习 OOP 编程大约一年半了,并且已经开发了一个我通常遵守的相当标准的框架。我很想就如何改进某些功能或是否有一些我忽略的事情提供反馈或意见。

查看模式

1) 基本上一切都始于 Index.php 页面。我要做的第一件事是需要我的“packages.php”文件,该文件基本上是一个配置文件,用于导入我将使用的所有类和函数列表。

2) 我的 index.php 文件和我的类之间没有直接通信,我所做的是用我的 viewfunctions.php 文件“美化它们”,该文件本质上只是通往类的管道,因此在我的html 我可以写<?php get_title('page'); ?> 而不是<?php echo $pageClass->get_title('page'); ?> 另外,我可以运行几个小布尔值和视图函数脚本中没有的东西,可以更好地定制类的输出。

3) 通过数据库引入的任何信息都是从与数据库类直接通信的相应类开始的,这是唯一允许直接与数据库通信的类(在我运行所有我的使用自定义类代码查询)。

输入模式

1) 任何用户输入都会发送到我的 userFunctions.php。

2) 然后实例化我的安全类,我发送已发布的任何用户输入以进行验证和确认。

3) 如果输入通过了我的安全检查,然后我将其传递给我的 DB 类以输入到我的数据库中。

php general model http://img139.imageshack.us/img139/3319/phpmodel.gif

反馈

我想知道总体结构是否存在明显的缺陷,或者我可以改进的方法。

提前感谢您的意见。我知道对此没有真正的“正确”答案,但我想几个赞成票将是为了获得有关构建框架的一些强有力的建议。

-J

【问题讨论】:

  • +1 用于出色的演示和关注点分离。
  • 有趣的实验和精彩的演示,但我不明白我们为什么要重新发明轮子。框架还不够吗?
  • @baloo 我会告诉你我的绝对理由 #1。因为我真的很喜欢它。
  • baloo:“不要重新发明轮子”之所以有效,是因为轮子被认为是完美的。有没有适合所有用途的框架?
  • @baloo 没有任何争论(我同意你的观点,并且会增加其中大多数缺乏测试会使麻烦加倍)......我只是无法忍受“不要重新发明轮子”......它爬上了我的脊椎。

标签: php frameworks


【解决方案1】:

我建议您做的一件事是将您的函数分成类。我理解您关于避免实例化的观点,但请考虑这一点:任何框架都必然会开始积累大量函数。

而不是做

<?php get_title('page'); ?>

您最好创建一个 Page 类,并将其所有函数都放在您静态调用的所述类中。然后,你的代码就变成了

<?php Page::GetTitle('page'); ?>

一个更具描述性的命名约定,稍后在尝试避免命名冲突时将变得至关重要(您只需要在 50 个类上避免名称冲突,而不是 2000 个函数)。

我会研究模型-视图-控制器设计方法(正如 ircmaxell 在他的帖子中暗示的那样)。许多非常强大且编写良好的框架都采用了这一原则,而不仅仅是 PHP 框架。我的建议 - 研究 Yii 以了解应如何控制您的应用程序 - 非常巧妙,并且创建者出色地使用了静态变量来控制类实例化。

祝你的框架好运!

【讨论】:

  • 感谢您的意见。对我来说,这是 PHP 和 OOP 的有趣灰色区域……不需要与构建类几乎相同的页面吗?我的意思是,当您包含一个页面时,您正在导入一组函数,可能还有一组变量。有一些区别,但如果你只是想容纳函数,这似乎是一种构建类的黑客方式,而不是实际构建类。再次感谢您的反馈!
  • +1 用于类,即使它们仅用于命名空间作为您的示例。
【解决方案2】:

嗯,我能看到的唯一问题(没有看到代码)是 SQL 将无处不在。我建议在数据库连接类前面创建一个“模型”层。这样,您的所有 sql 都在一个位置(将其分成多个模型等)。它使维护变得更加容易(如果您想向表中添加列、优化查询等)...

否则,它看起来像一个好的开始!

【讨论】:

  • 确实如此。我的 userfunction.php 和视图类中有大量查询代码。我使用类似于 $dbConnect->runQuery($query).. 的函数从我的 DB 类中运行实际查询,但实际查询字符串写在视图类(或用户函数脚本)中。
  • 我真的很喜欢 Kohana 的视图概念...基本上,$view = new View('path/to/template'); 然后将变量分配给视图$view->title = 'blah';...然后,您需要做的就是@987654324 @模板内不需要$viewObject->get_title();,只需echo $title;...
  • 我对此感到困惑。我认为您说得非常对,“模型”课程是一个巨大的好处。但我也非常相信 David Heinemeier Hansson 的哲学SQL is neither dirty nor bad
  • @Josh - 我同意那篇文章中的观点。我只是更喜欢将所有 SQL 保留在一个层中(通常是少数几个类),以便轻松找到需要更改的内容。通过打开一个类来查找特定表中的所有插入要容易得多,然后它是 grepping 或试图翻阅 40 或 50 个文件......无论哪种方式,你都有一个非常有效的观点......
【解决方案3】:

很好的介绍。我肯定会深入了解其他流行的框架以获得一些见解。

乍一看,我建议你看看你是否能找到一种方法来只加载每个请求所需的类。如果类库变大,为每个请求都加载它们可能会变得不可行。

【讨论】:

  • 我想知道这一点。使用几个布尔值不会太难。爱它!谢谢!
【解决方案4】:

您在使用自动装载机吗?看来你会使用很多需求......也许我只是误解了。我认为您编写自己的框架很棒。我不认为它是“重新发明轮子”,因为您正在编写它来完成您想要完成的任务并且可以控制项目的整体重量,因为按照大多数标准,您对 OOP 仍然是中等程度的新手,我确信从经验中学到了很多东西。创建自己的框架,尝试改进其他人的代码并学习其他人如何做事以及为什么是一个了不起的学习体验,在我看来,这将极大地提高你的编程技能和理解力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    相关资源
    最近更新 更多