现在5.4.x已经到了生命周期结束阶段,我们要升级到5.6版本,以便可以真正地开始开发新功能。但是我们遇到了以下问题:
Strict standards: Declaration of Hobis_Api_Cache::get() should be compatible with Memcached::get($key, $cache_cb = NULL, &$cas_token = NULL, &$udf_flags = NULL)
看起来像一个重要的 SF2 组件:LswMemcacheBundle 有同样的问题,但他们的“解决”办法是从 Memcached 切换到 Memcache API,这可能有效,但我们选择 Memcached 是有原因的。然而,Memcached 的 PHP 包裹物的维护者似乎不认为修复此问题是高优先级的。然而,随着更多用户因 5.4 EOL 被迫升级到 5.5+,我认为这个问题需要尽快解决。
所以我的问题是,有人找到了这个问题的优雅解决方案吗?
我们内部的中间件 (Hobis_Api) 在一定程度上保护我们,因为我可以将 set
和 get
函数拆分出来并放入它们自己的类中,该类不继承自 Memcached,然后根据当前的 PHP 版本 id 将它们视为包装函数,有点像这样:
// Now
class Hobis_Api_Cache extends memcached
{
public function set($key, $value, $expiry = self::EXPIRY_DEFAULT) {}
}
// Proposed
class Hobis_Api_Cache_Package
{
public static function set($key, $value, $expiry, $udfs)
{
$cache = new Memcached;
if (PHP_VERSION_ID < 50500) {
$cache->set($key, $value, $expiry);
} else {
$cache->set($key, $value, $expiry, $udfs);
}
}
}
但显然这会很麻烦,因为我需要更新所有调用代码从$cache->set()
到Hobis_Api_Cache_Package::set()