我正在开发一个PHP类,它作为通过PECL扩展提供的Memcached类的包装器。我在处理调用get
方法的方法时遇到困难。 get方法中的第三个参数默认为null并通过引用传递变量。我在使用我的包装器镜像Memcached get
方法的功能时遇到了困难。
通过直接使用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函数,它通过将CAS标记设置为该var来工作,然后可以访问该变量。
在我的课堂上,我希望能够使用我的包装器方法使用这个CAS令牌;但是,我希望能够根据是否使用第三个变量调用方法来执行不同的操作。当我使用包装器方法时,我找不到区分是否已显式调用第三个变量的方法。我正在尝试的骨架如下:
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调用它。你知道我能区分这两个事件吗?
谢谢!
答案 0 :(得分:2)
http://www.php.net/manual/en/function.func-num-args.php
您可以通过此函数确定函数中传递了2个或3个参数。如果number为3,则表示已传递实际空值,如果不是,则函数中只传递两个参数。