将对象固定到内存


Pinning objects to memory

我正在尝试想一种简单的方法来将PHP对象永久固定到内存中,然后将其提供给其他更短暂的对象,以便在处理页面请求的正常工作期间使用它进行消息。我对 Wordpress 还比较陌生,所以也许我把事情弄得太复杂了......让我通过一个例子来演示我希望能够做什么:

  1. 在启动时加载一个 UOM(度量单位(对象,该对象轮询数据库以获取单位列表、默认单位、单位类别(例如,磅是imperial度量(、转化率等。
  2. 想要使用 UOM 转换或查找的后续服务请求将简单地调用全局 UOM 对象 ( $UOM->get_measures_for_category ('speed') (。此对象已位于内存中,无需返回到数据库即可为请求提供服务。
  3. UOM 上的update()方法将允许基于事件或计时的触发器请求 UOM 对象自行更新。
这只是一个例子,其中有一些

相对静态的数据集被服务请求定期使用,重复查询数据库将是浪费。希望人们熟悉这种模式,也许可以向我指出一些如何在Wordpress/PHP环境中执行此操作的示例。

对于你想要的,这不是最好的方法。然而,你所说的需要了解PHP和编程的基本原则之一,也就是范围,即全局范围是什么。

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

 $uom = new UOM_Class();

然后在之后的任何文件中写入:

global $uom;
$uom->something();

它会起作用。

然而,这一切都是浪费,相反,使用静态方法会更好,更像是单例模式,例如:

UOM::Something();

我把它留给你一个任务,让你学习什么是单例,什么是作用域,这些是PHP的基本原则,你不应该声称知道PHP而不了解作用域。最好的表达方式是,在日常对话中,它被称为上下文,全球范围无异于同时在每个人的耳边大喊大叫。每个人都可以访问它,它不是你想要污染的东西

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

http://php.net/manual/en/language.variables.scope.phphttp://www.homeandlearn.co.uk/php/php8p2.html

http://php.net/manual/en/language.oop5.patterns.php

当我最初发布时,我没有明确说明我的问题,但根据与汤姆的对话,我同意在 Stack Overflow 上更清楚地重新发布。