【问题标题】:Determining difference between NULL default value and NULL argument inside a function确定函数内 NULL 默认值和 NULL 参数之间的差异
【发布时间】:2012-06-25 02:32:57
【问题描述】:

我正在开发一个 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 调用它。你知道我有什么方法可以区分这两个事件吗?

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!这是个好主意...我要试一试!
    猜你喜欢
    • 1970-01-01
    • 2010-09-21
    • 2013-04-28
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 2011-09-27
    • 2013-07-14
    • 2017-01-24
    相关资源
    最近更新 更多