0

我正在开发一个 PHP 类,该类用作通过 PECL 扩展提供的 Memcached 类的包装器。我在处理调用该get方法的方法时遇到了困难。get 方法中的第三个参数默认为 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 函数,它通过将 CAS 令牌设置为该 var 来工作,以后可以访问该 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 调用它。你知道我有什么方法可以区分这两个事件吗?

谢谢!

4

1 回答 1

2

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

您可以通过此函数确定函数中传递了 2 个或 3 个参数。如果 number 为 3,则传递了实际的 null 值,如果不是,则函数中只传递了两个参数。

于 2012-06-28T20:44:41.607 回答