My only objection to the static properties is it makes the code fragile to extension. Say a developer needs to customize MemcachedEngine and creates MyMemcachedEngine for some reason. In that class they redefines the _defaultConfig, adding in a few new options. The code above will fail to include the defaults in MemcachedEngine.

If we set the expectation that you can only define the defaults that are relevant to your subclass then we have to walk all the parent classes and merge the properties in. If we keep a simpler no-magic contract with the developer than we don't have to walk class hierarchies as what the person types is what the person gets.