/** * @fixme Should this return false on lookup fail to match staticGet? */ function pkeyGet($cls, $kv) { $i = Memcached_DataObject::multicache($cls, $kv); if ($i !== false) { // false == cache miss return $i; } else { $i = DB_DataObject::factory($cls); if (empty($i) || PEAR::isError($i)) { return false; } foreach ($kv as $k => $v) { $i->{$k} = $v; } if ($i->find(true)) { $i->encache(); } else { $i = null; $c = self::memcache(); if (!empty($c)) { $ck = self::multicacheKey($cls, $kv); $c->set($ck, null); } } return $i; } }
function &pkeyGet($cls, $kv) { $i = Memcached_DataObject::multicache($cls, $kv); if ($i) { return $i; } else { $i = new $cls(); foreach ($kv as $k => $v) { $i->{$k} = $v; } if ($i->find(true)) { $i->encache(); } else { $i = null; } return $i; } }
/** * @todo FIXME: Should this return false on lookup fail to match staticGet? */ function pkeyGet($cls, $kv) { $i = Memcached_DataObject::multicache($cls, $kv); if ($i !== false) { // false == cache miss return $i; } else { $i = DB_DataObject::factory($cls); if (empty($i) || PEAR::isError($i)) { return false; } foreach ($kv as $k => $v) { if (is_null($v)) { // XXX: possible SQL injection...? Don't // pass keys from the browser, eh. $i->whereAdd("{$k} is null"); } else { $i->{$k} = $v; } } if ($i->find(true)) { $i->encache(); } else { $i = null; $c = self::memcache(); if (!empty($c)) { $ck = self::multicacheKey($cls, $kv); $c->set($ck, null); } } return $i; } }