0

私はGearmanのクライアントワーカースクリプトに取り組んでいます。Gearmanコールバックメソッドを保護またはプライベートとして宣言できますか?すなわち

$this->gearmanClient->setCompleteCallback(array($this, 'JobComplete'));
$this->gearmanClient->setFailCallback(array($this, 'JobFailCallBack'));

'JobComplete'メソッドなどで使用するのに最適なアクセス演算子は何ですか?

4

2 に答える 2

3

PHPでは、プライベート/保護されたコールバックは、適切なコンテキストから呼び出された場合にのみアクセスできます(たとえば、これらのコールバックにアクセスできるクラス内で) 。説明については、ここを参照してください。

あなたの場合、GearmanClientクラスはコールバックにアクセスできません(本当に奇妙な抽象化を行わない限り)。だから答えはノーです、あなたはできません。

アクセス演算子の質問(私が正しく理解している場合-オブジェクトコールバックとクラスコールバックのどちらを使用するか)については、答えは-状況によって異なります。コールバックが特定のオブジェクトに関するデータを提供する場合、そのオブジェクトがコールバックを受信することは理にかなっています。アプリがDBに保存するだけの一般的なメッセージである場合は、静的クラスインターフェイスでもそれを実行できます。

于 2012-06-11T10:21:27.833 に答える
1

もちろん、我々はできます。クロージャーを包むだけです:

$this->gearmanClient->setCompleteCallback(function () {
    $this->JobComplete();
});
于 2013-02-11T13:35:16.373 に答える