Php 将对象固定到内存

Php 将对象固定到内存,php,performance,memory,Php,Performance,Memory,我正试图想出一种简单的方法,将一个PHP对象永久地固定到内存中,然后让其他更临时的对象在处理页面请求的正常工作中使用它来传递消息。我对Wordpress还比较陌生,所以可能我把事情弄得太复杂了。。。让我通过一个例子来说明我希望能够做什么: 启动时加载一个UOM(计量单位)对象,该对象轮询数据库中的单位列表、默认单位、单位类别(例如磅是一种英制计量单位)、转换率等 想要使用计量单位转换或查找的后续服务请求只需调用全局计量单位对象($UOM->get\u measures\u for_categor

我正试图想出一种简单的方法,将一个PHP对象永久地固定到内存中,然后让其他更临时的对象在处理页面请求的正常工作中使用它来传递消息。我对Wordpress还比较陌生,所以可能我把事情弄得太复杂了。。。让我通过一个例子来说明我希望能够做什么:

  • 启动时加载一个UOM(计量单位)对象,该对象轮询数据库中的单位列表、默认单位、单位类别(例如磅是一种
    英制
    计量单位)、转换率等
  • 想要使用计量单位转换或查找的后续服务请求只需调用全局计量单位对象(
    $UOM->get\u measures\u for_category('speed')
    )。这个对象已经在内存中,不需要返回数据库为请求提供服务
  • UOM上的
    update()
    方法将允许基于事件或计时的触发器请求UOM对象自我更新

  • 这只是一个例子,说明服务请求经常使用一些相对静态的数据集,重复查询数据库将是浪费。希望大家都熟悉这种模式,并能给我举一些例子,说明如何在Wordpress/PHP环境中做到这一点。

    因为这不是最好的方法。然而,您所谈论的内容需要了解PHP和编程的基本概念之一,即全局范围是什么

    因此,如果您在全局范围内声明:

     $uom = new UOM_Class();
    
    然后在以后的任何文件中写入:

    global $uom;
    $uom->something();
    
    它会起作用的

    但是,这完全是浪费,相反,使用静态方法和更类似于单例模式的方法会更好,例如:

    UOM::Something();
    
    我把学习什么是单例和什么是作用域作为一项任务留给您,这些是PHP的基本特性,您不应该在不了解作用域的情况下声称了解PHP。最好的表达方式是,在日常对话中,它被称为语境,全球范围相当于同时在每个人的耳朵里喊叫。每个人都可以访问它,而不是你想污染的东西

    如果我看起来有点苛刻,我很抱歉,这里有一些文章应该会有所帮助,它们讨论了范围、单例和其他一些实现方法,比如对象工厂

    http://www.homeandlearn.co.uk/php/php8p2.html


    我最初发帖时没有明确提出我的问题,但根据与Tom的对话,我同意在Stack Overflow上更清楚地转发这个问题。

    我理解什么是单例和范围。我想你对我的经验水平做了一些不正确的假设。我的问题实际上是不理解Wordpress中的对象生命周期。我的假设是,它实际上是无状态的,每个web请求都会导致一组操作,但在这些操作结束时(无论它们是否包括对象工厂、单例、全局变量等等),通过管道的下一个请求都无法访问这些对象。我希望创建一个对象池,其中包含事务可以访问的半静态信息(理想情况下通过命名空间而不是全局变量)我想memcached和redis等技术/技术可能与我的需求重叠,但我还没有使用这些技术/技术,我的印象是,它们的方法更通用,因此,如果该模式可行,设计的共享对象池解决方案可能会带来更大的好处我不知道有任何这样的解决方案,WordPress本身也不处理任何这样的机制,除非涉及缓存插件,也许你应该修改你的问题,让它更清楚,您想要创建一个对象实例并使其在PHP实例之间的内存中持久化,这一点并不十分明显。您最好的选择可能是使用WP_缓存与使其持久化的缓存插件相结合。此对话已移至: