框架中的php全局变量开销

时间:2011-09-08 09:05:32

标签: php performance frameworks global

我目前正在开发一个使用Core类对象的框架(此类具有巨大的功能并且使框架正常工作)。该框架遵循MVC架构和具有松散耦合的Model,Control,View类。这些类需要大量引用Core类。到目前为止我所做的是:创建Core类的单个对象&在Model,Control,View类中通过PHP关键字global引用它。

我不喜欢使用这种方法主要是因为:

  • 在我看来,这种方式不是真正面向对象的方式
  • IDE(netbeans)无法为Core类的对象提供文档 - 这对于将使用此框架的开发人员来说是一种痛苦。
  • 我真的很担心性能问题 - 不知道global是慢还是其他。

我搜索过&没有找到任何有关性能问题的信息。我也搜索了stackoverflow&找到了Does using global create any overhead?& The advantage / disadvantage between global variables and function parameters in PHP?等链接,但它们不包含太多信息。 现在我的主要关注点是性能,所以请帮助。

3 个答案:

答案 0 :(得分:4)

我必须同意NevilleK,你的核心`类听起来是God Object反模式。

对于任何愚蠢到建议使用单身人士/登记处的人,我建议对这个问题进行一些研究。它们创建与经典全局变量相同的全局状态。

全局状态与性能无关(尽管在php中它有一些小的影响),但它创建了不可测试且紧密耦合的代码。

你真的应该研究依赖注入。这可能会向您展示另一种方式,即您的代码中不需要这样的Core类。


为您准备了一些其他视频:

答案 1 :(得分:2)

我通过为Agile Toolkit创建不同的模式并在系统范围内使用它来解决adding object中的类似问题。这会将属性传递给名为“api”的新创建的对象,该对象始终引用Application class

应用程序类实际上并不是一个上帝类,但是它将各种功能委托给系统控制器,页面等。这个截屏视频解释了基本对象是如何构造的,它可能是你正在寻找的东西:

http://www.youtube.com/watch?v=bUNEHqYVOYs

答案 2 :(得分:1)

首先,当你关注表现时,你可能想先阅读http://en.wikipedia.org/wiki/God_object - 你的“核心”类听起来像一个“上帝对象”,这是一个相当完善的反模式。

在性能方面 - 最好的方法是测试它。如果您正在编写框架,我假设您正在编写单元测试来验证它的行为;将单元测试扩展到简单的性能指标并不难。您也可以使用JMeter或类似方法投资测试脚本,以实现使用该框架构建的几个页面的“参考实现”。通过这样做,您可以获得更好的关于您的具体情况的信息,而不是基于Stack Overflow对一般工作方式的集体知识来优化设计。

总的来说,我认为拥有一个全球级别不应该影响性能太多,只要它没有做太多工作。简单地将类加载到内存中,解析它等等确实会对性能产生影响 - 但它可能不会比您可能采用的任何其他路径慢得多。

但是,如果您的“核心”类在页面访问它时会执行大量初始化逻辑,那么它显然会影响性能。