我正在尝试想一种简单的方法来将PHP对象永久固定到内存中,然后将其提供给其他更短暂的对象,以便在处理页面请求的正常工作期间使用它进行消息。我对 Wordpress 还比较陌生,所以也许我把事情弄得太复杂了......让我通过一个例子来演示我希望能够做什么:
- 在启动时加载一个 UOM(度量单位(对象,该对象轮询数据库以获取单位列表、默认单位、单位类别(例如,磅是
imperial
度量(、转化率等。 - 想要使用 UOM 转换或查找的后续服务请求将简单地调用全局 UOM 对象 (
$UOM->get_measures_for_category ('speed')
(。此对象已位于内存中,无需返回到数据库即可为请求提供服务。 - 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 上更清楚地重新发布。