Теперь, когда 5.4.x находится в EOL, мы делаем прыжок на 5.6, чтобы мы могли вернуться к работе над функциями. Однако мы работаем с:PHP 5.6 - Memcached - Strict Stadards
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 по какой-то причине. Однако поддерживающие php-обертки для memcached, по-видимому, не считают фиксирование this issue приоритетным. Однако, поскольку все больше пользователей вынуждены обновлять до 5.5+ из-за 5.4 EOL, я думаю, что эту проблему нужно будет решить раньше, чем позже.
Итак, мой вопрос: кто-нибудь придумал элегантное решение этой проблемы?
Наши в доме промежуточного слоя (Hobis_Api) защищает нас немного, что я могу вырваться из set
и get
функции и поместить их в своем собственном классе, который не распространяется Memcached, то относиться к ним, как на основе функции оболочки на текущей версии PHP ид, что-то вроде этого:
// 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 б/с я должен обновить весь код вызова от $cache->set()
к Hobis_Api_Cache_Package::set()
Хотя мне нравится ответ Pauls - другой альтернативой было бы иметь два файла, содержащие Hobis_Api_Cache. Один для каждой версии PHP и включает тот, который соответствует классу Memcached, который вы распространяете во время выполнения. –
@SteveE. Проблема в том, что мне пришлось бы поддерживать несколько файлов, которые были похожи на 95%, и внести изменения в автозагрузчик, чтобы определить, какой из них использовать. –
@PaulCrovella: Можете ли вы опубликовать ответ, чтобы я мог принять его? –