1

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

在 hooks.php 上,它之前是这样调用的:

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

它调用 event_create_model.php 中的函数 send_email()

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

现在我想拆分那个函数,所以我在 event_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() 中访问该变量时,我可以正常访问。我认为这与我无权访问的隐藏代码有关,它正在调用 example($data),但我想不出任何会阻止传递变量的东西。

4

1 回答 1

2

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

You're RightNow hook 将始终实例化 event_create_model。请记住,尽管send_email()静态调用self::send_email()意味着模型未实例化或不需要访问非静态的类方法和属性,因此在编程send_email()方法将执行的操作时需要考虑到这一点。

于 2013-10-03T21:34:13.500 回答