无法将变量传递给另一个类函数

时间:2013-10-03 15:50:42

标签: php function variables rightnow-crm

这是为客户门户使用Oracle RightNow平台,因此我无法完全访问所有代码。

在hooks.php上,它之前称之为:

$rnHooks['post_incident_create'][] = array(
    'class' => 'incident_create_model',
    'function' => 'send_email',
    'filepath' => ''
);

调用incident_create_model.php中的函数send_email()

function send_email($data)
{
     //uses the variable $data to send an e-mail 
}

现在我想拆分该函数,所以我在incident_create_model.php中创建了另一个函数,所以首先修改hooks.php来调用新函数。

$rnHooks['post_incident_create'][] = array(
    'class' => 'incident_create_model',
    'function' => 'example',
    'filepath' => ''
);

我定义新定义的函数example()并从中调用send_email()

function example($data)
{
    send_email($data);
}

此操作失败并导致错误。我有什么理由不能传递变量$ data吗?当我尝试在函数example()中时,我可以访问变量。我认为它与隐藏代码有关,我没有访问权限调用示例($ data),但我想不出任何会阻止变量传递的东西。

1 个答案:

答案 0 :(得分:2)

在面向对象的范例中编程时,必须牢记方法范围。在没有send_email()的情况下调用$this意味着send_email方法位于全局范围内。但是,该方法实际上是在incident_create_model对象中定义的。因此,通过将调用更改为$this->send_email($data);,PHP知道您尝试调用的send_email()方法是在该类中定义的,而不是在某处定义的过程方法。

您的RightNow挂钩将始终实例化incident_create_model。请记住,虽然静态调用send_email()self::send_email()意味着模型未实例化或不需要访问非静态的类方法和属性,因此您需要考虑到这一点。编程send_email()方法将做什么。