can';我不理解这个函数(getCache)在PHP中是如何工作的

can';我不理解这个函数(getCache)在PHP中是如何工作的,php,Php,希望有人能帮助我理解这一点: function getCache($key, $timeout = 30) { $contents = false; if (MEMCACHE <> 0) { global $memcache; $contents = $memcache->get($key); } if (empty($contents)) { return false; }

希望有人能帮助我理解这一点:

function getCache($key, $timeout = 30) {
    $contents = false;
    if (MEMCACHE <> 0) {
         global $memcache;
         $contents = $memcache->get($key);
     }
    if (empty($contents)) {
        return false;
    }
    return $contents;
}

if($onlineFrnds = getCache($userid, 30)){
//do stuff
}
函数getCache($key,$timeout=30){ $contents=false; if(MEMCACHE 0){ 全球$memcache; $contents=$memcache->get($key); } if(空($contents)){ 返回false; } 返回$contents; } 如果($onlineFrnds=getCache($userid,30)){ //做事 } 我并没有写这段代码,而是在我试图修改的代码中(为了理解)

我无法解释的是用30调用setCache,以及为什么用$timeout=30再次设置它。此外,函数中未使用$timeout。
如果超过30秒,则if条件的计算结果为true。

$timeout=30
是默认参数。这意味着如果不提供该参数,则该参数将使用值
30

下面是一个小演示,向您展示它的工作原理:

function demo($timeout = 30) {
    return $timeout;
}

echo demo(); // 30
echo demo(15); //15


看起来,
$timeout
用于使缓存过期,但从未使用过。

您看到的是可选参数的定义

让我们看看,例如。。。啊,

字符串修剪(字符串$str[,字符串$character\u mask=“\t\n\r\0\x0B”])

您看到了吗,
$character\u mask
参数是如何在函数签名中“定义”的?这意味着,如果不在那里传递参数,那么它将默认为该参数

现在,在您的代码中,它被设置为
30
,而
30
是默认值。这很好,这意味着它不依赖于默认值(因为理论上它可能会改变,所以对于这个调用,它总是
30


现在,对于没有被使用的代码,这看起来更像是代码本身的设计缺陷,或者可能是复制/粘贴/Derp™, 其中,函数签名是从另一个函数复制的,然后不进行编辑。如果函数callOne没有调用另一个函数,那么$timeout=30是默认值,除非我们遗漏了什么。setCache()不调用getCache()这是一个缓存函数,机制很简单,它尝试获取缓存内容,如果没有缓存,我们将其设置为返回。抱歉,这是我的错误,setCache必须是getCache,我编辑了代码。这个问题似乎与主题无关,因为它可以在中找到。是的,当你得到一个命中时,为缓存中的东西设置一个新的TTL是很常见的。它在想“好吧,这首歌一定很重要,我要再保留几秒钟”——它只是没有实现。如果您希望在某些内容将在nnn秒内过期时返回false,那么它也很有用。