我正在尝试将插件中的一些变量用于页面上的类实例。但它没有显示正确的值。
以下是插件的相关部分:
class opi{
// version
public $opi_version = "1.0";
public $mg = 0;
//constructor
public function opi(){
$this->__construct();
}
public function __construct(){
add_action(\'init\', array(&$this, \'o_check\'));
// ...
}
function o_check(){
if (is_user_logged_in()){
$this->mg = 4;
}
}
}
$opi = new opi;
如果我把
echo $this->mg;
就在
o_check()
函数,然后显示
4
. 好的
现在,如果我把下面的内容放在第页。php,然后我登录WordPress,我得到了结果0
.
<?php $pageopi = new opi; ?>
<?php echo $pageopi->mg; ?>
你知道我哪里做错了吗?
SO网友:s_ha_dum
如果添加此部件:
<?php $pageopi = new opi; ?>
<?php echo $pageopi->mg; ?>
在主题模板中,它将在
init
吊钩运行,因此
o_check
方法将永远不会运行。这就是问题所在。这就是为什么如果在对象下初始化,而不是在页面模板中初始化,它会起作用。您需要更改挂钩,或更早地初始化,或调用
o_check
明确地
将对象初始化为global
会有用的。
class opi{
// ...
}
global $opi;
$opi = new opi;
然后,在模板中,您可以使用:
global $opi;
echo $opi->mg;
尽管您使用它的方式与静态类一样好或更好。很难说。我不知道这门课的最终目的是什么。