这是为客户门户使用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),但我想不出任何会阻止变量传递的东西。
答案 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()
方法将做什么。