私は、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 つのイベントを区別する方法を知っていますか?
ありがとう!