1

これは、カスタマー ポータルに 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() で試してみると、変数に問題なくアクセスできます。example($data) を呼び出しているアクセス権がない隠しコードと関係があると考えていますが、変数が渡されるのを妨げるものは何も考えられません。

4

1 に答える 1

2

オブジェクト指向パラダイムでプログラミングするときは、メソッドのスコープを念頭に置く必要があります。send_email()なしで呼び出す$thisことは、send_email メソッドがグローバル スコープにあることを意味します。ただし、そのメソッドは実際には、incident_create_model オブジェクトで定義されています。そのため、呼び出しを に変更すること$this->send_email($data);で、PHPは、呼び出そsend_email()うとしているメソッドが、どこかの手続き型メソッドとしてではなく、そのクラスで定義されていることを認識します。

You're RightNow フックは常に、incident_create_model をインスタンス化します。send_email()ただし、静的に呼び出すself::send_email()ことは、モデルがインスタンス化されていないか、静的ではないクラス メソッドやプロパティにアクセスする必要がないことを意味するため、メソッドが何をするかをプログラミングするときにそれを考慮する必要があることに注意してsend_email()ください。

于 2013-10-03T21:34:13.500 に答える