确定函数内的NULL缺省值和NULL参数之间的差异

时间:2012-06-25 02:32:58

标签: php null memcached pass-by-reference optional-parameters

我正在开发一个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调用它。你知道我能区分这两个事件吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

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

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