我正在学习创建一个WP插件作为一个类。然而,在调用我的函数时,add\\u操作似乎不起作用;它在使用$this->init()时工作。
示例:
class test
{
public $age = NULL;
public function __construct()
{
//register an activation hook
register_activation_hook( __FILE__, array( &$this, \'installplugin\' ) );
add_action(\'init\', array( &$this, \'init\' ) ); //this doesn\'t work
//$this->init(); //This WORKS!
}
function installplugin()
{
add_option( \'age\', 45 );
$this->init();
}
function init()
{
$age = get_option( \'age\' );
$this->age = $age;
}
function printAge( )
{
echo "The age is " . $this->age . "<br />";
}
}
因此,运行后:
$learnObj = new learnable_test();
$learnObj->printAge();
它只打印:“年龄是”
但是如果我没有注释掉add\\u操作(\'init\',…)然后使用$this->init(),这似乎可行,打印“年龄是45”
我错过了什么?
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成
嗯,它不能也不会像你想要的那样工作。
让我们看看你到底在做什么。
在构造函数中,您有:
add_action(\'init\', array( &$this, \'init\' ) ); //this doesn\'t work
所以你加上
init 对象到WPs的方法
init 钩WP运行时
init 行动,然后你的
init 方法将运行到,但不早也不晚。
然后你可以这样做:
$learnObj = new learnable_test();
$learnObj->printAge();
所以您创建了类的对象。它将添加
$learnObj->init 至WPs
init 钩
如果您在WPs之后调用这两行init 钩子已经做了,什么都不会发生。
如果你以前给他们打过电话(我想是的),你的$learnObj->init 将在WPs期间执行init 行动(和age 将设置变量)。
但在第二行,你想访问这个age 变量这里还没有设置,因为WP还没有执行init 行动$learnObj->init 也没有被执行。