PHP 5.6 - Memcached - 严格的标准

标签 php memcached

现在 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有同样的问题,但他们的“修复”是将 API 从 Memcached 切换到 Memcache,这可能有效,但我们选择 Memcached 是有原因的。然而,memcached 的 php 包装器的维护者显然没有看到修复 this issue作为高优先级。然而,由于 5.4 停产,越来越多的用户被迫更新到 5.5+,我认为这个问题需要尽快解决。

所以我的问题是,有没有人想出一个优雅的解决方案来解决这个问题?

我们的内部中间件 (Hobis_Api) 稍微保护了我们一下,因为我可以分解 setget 函数并将它们放在它们自己的类中,它不扩展 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);
        }
    }
}

但显然这将是一个 PITA b/c 我必须将所有调用代码从 $cache->set() 更新为 Hobis_Api_Cache_Package::set()

最佳答案

感谢 Paul 的建议,最终结果如下:

class Hobis_Api_Cache extends memcached
{
    /**
     * Magic method override so we can use our version of get/set
     *  Otherwise default get/set will break in php 5.5+
     *
     * @param string
     * @param array
     */
    public function __call($name, $arguments)
    {
        switch ($name)
        {
            // Override due to 5.5+ using php-memcache 2.2
            case 'get':

                $this->myGet($arguments);

                break;

            // Override due to 5.5+ using php-memcache 2.2
            case 'set':

                $this->mySet($arguments);

                break;
        }
    }
}

这仅在您使用自己的类扩展 memcached 类时才有效,否则,您可能需要考虑添加自己的类。

关于PHP 5.6 - Memcached - 严格的标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32894456/

相关文章:

php - 如果产品变体已添加到购物车,请移除该 block

php - 创建 PHP future 日期的更好方法

php - 使用codeigniter创建主页面

php - Symfony 表单字段即使有错误也有效?

mysql - 实现 MySQL 哈希表的最佳方式?

php - 找不到类 memcached

php - nodejs无法读取phpsessid并返回错误未定义

php - 在我删除 softDelete 后,Laravel 仍然希望找到 deleted_at 列

ruby-on-rails - 为 memcached 和 Rails 组合片段和对象缓存的最佳方法

Flask-cache memcache 连接自动重新连接