这里有一个非常简单的插件,我在多站点安装中将其放入mu\\u插件中:
<?php
/*
Plugin Name: Test
*/
class myclass {
function __construct() {
error_log("I just punched myself in the head.");
}
} // end of class definition
/* start of plugin functions */
function run_plugin() {
static $counter = 0;
if (0 === $counter++)
$i = new myclass();
}
/* start of execution code */
add_action(\'init\',\'run_plugin\');
好的-我登录到WP admin,并切换页面两次--转到媒体库,然后转到主题。正在计算索引上的第一次着陆。php共有三个页面渲染。
此插件的输出:
I just punched myself in the head.
I just punched myself in the head.
I just punched myself in the head.
那么,给定调用函数中的静态计数器,为什么构造函数会被调用三次?或者,WP是否正在破坏我的插件并在每次加载页面时重新加载它?
我很困惑。
SO网友:Mateusz Hajdziony
不幸的是,这不是PHP的工作方式。PHP程序在单个请求期间(即有人加载页面时)完全执行(从头到尾)。一旦单击任何链接(转到网站中的另一个页面),所有内容都将被销毁(每个变量、类实例等),整个脚本将从头开始。
对于WordPress,每次有人请求页面时,都会加载并执行整个WordPress环境。WordPress的每一个动作(比如你在\'init\'
) 执行,所有插件和类都实例化。
当然,缓存发生在服务器端,但这是一个高级主题,对于初学者来说可能并不感兴趣。
正如Milo所说,如果您想让某些内容在页面加载到页面加载之间保持不变,那么必须将其存储在数据库中,很可能使用transient API (如果这是某种数据,而不是设置或帖子)。如果您所做的是希望每个用户运行一次的操作,则可以将其作为cookie存储在用户的浏览器中。