0

私は、PECL 拡張機能を介して提供される Memcached クラスのラッパーとして機能する PHP クラスに取り組んでいます。メソッドを呼び出すメソッドの処理に問題がありgetます。get メソッドの 3 番目の引数のデフォルトは null で、参照によって変数を渡します。getラッパーでMemcached メソッドの機能をミラーリングするのに問題があります。

Memcached クラスを直接使用すると、次のことが起こります。

$m = new Memcached();
$m->addServer( '127.0.0.1', 11211 );

$m->add( 'my-key', 'my-value' );

$m->get( 'my-key', null, $cas_token );

var_dump( $cas_token ); // (float) 3212

ここでのポイントは、初期化されていない null var を get 関数に渡すことができ、その var に CAS トークンを設定することで機能し、後でアクセスできるようになることです。

私のクラスでは、この CAS トークンをラッパー メソッドで使用できるようにしたいと考えています。ただし、メソッドが3番目の変数で呼び出されるかどうかに応じて、別のことを行う機能が必要です。ラッパー メソッドを使用する場合、3 番目の変数が明示的に呼び出されているかどうかを区別する方法が見つかりません。私が試みているもののスケルトンは次のとおりです。

class MyMemcached {

    ...

    public function get( $key, $cache_cb = NULL, &$cas_token = NULL ) {
        if ( is_callable( $cache_cb ) || ! is_null( $cas_token ) ) {
            $this->m->get( $key, $cache_cb, $cas_token );
        } else {
            // Do something differently
        }
    }
}

$myMemcached = new Memcached();
$myMemcached->addServer( '127.0.0.1', 11211 );

$myMemcached->add( 'my-key', 'my-value' );

$myMemcached->get( 'my-key', null, $cas_token );

var_dump( $cas_token ); // NULL

繰り返しますが、MyMemcached::get では、ユーザーが NULL var を使用して呼び出すかどうかを区別できません。この 2 つのイベントを区別する方法を知っていますか?

ありがとう!

4

1 に答える 1

2

http://www.php.net/manual/en/function.func-num-args.php

関数に渡された2つまたは3つの引数が何であれ、この関数によって決定できます。number が 3 の場合は、実際の null 値が渡されています。そうでない場合は、関数に渡されるパラメーターは 2 つだけです。

于 2012-06-28T20:44:41.607 に答える