在插件中启动全局变量

时间:2015-08-04 13:05:03

标签: php

我正在尝试编写插件,并且我尝试定义API密钥并启动我的其他功能可以使用的新类。我希望它始终启动(即使我的插件已经注册)。我尝试了以下代码:

if ( !class_exists( 'Mailchimp' ) )
{
    require_once 'src/Mailchimp.php';
}

function init() {
    $apiKey = '1234';
    $api = new Mailchimp( $apiKey );
}

但是,我之后会看到另一个函数:

function rb_mailchimp_options() {
     $types = array('user'=>true, 'base'=>true);
     $filters = array('include_inactive'=>true, 'include_drag_and_drop'=>true);
     $templates = $api->templates->getList($filters);
}

我收到错误消息,因为它说Call to a member function getList() on a non-object因此它无法识别我之前尝试初始化的$api变量。任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:3)

如果您只想在该类中使用API​​,请将其存储在类变量

protected $api;
function init() {
    $apiKey = '1234';
    $this->api = new Mailchimp( $apiKey );
}

function rb_mailchimp_options() {
     $types = array('user'=>true, 'base'=>true);
     $filters = array('include_inactive'=>true, 'include_drag_and_drop'=>true);
     $templates = $this->api->templates->getList($filters);
}

查看添加的$this->api以访问班级中的类变量。

如果你想在课外使用它,你应该创建一个吸气剂。

向您的修改:

如果你没有在课堂上使用这些功能,但是他们像这样一起工作,你应该考虑将它们组合在一个类中以便更容易地管理它们。

如果您不想这样做,最简单的方法就是使用$api作为参数:

function init() {
    $apiKey = '1234';
    return new Mailchimp( $apiKey );
}
function rb_mailchimp_options($api) {
     $types = array('user'=>true, 'base'=>true);
     $filters = array('include_inactive'=>true, 'include_drag_and_drop'=>true);
     $templates = $api->templates->getList($filters);
}

而不是像这样打电话给他们:

$api = init();
rb_mailchimp_options($api);