在对象级别设置缓存处理程序?

时间:2013-11-08 04:47:47

标签: php late-binding late-static-binding

假设我有一个基础对象,CacheObject:

abstract class CacheObject {
    protected static $handler = null;

    public static function setCacheHandler($handler) {
        static::$handler = $handler;
    }

    public static function getCacheHandler($handler) {
        return static::$handler;
    }
}

class A extends CacheObject {

}

class B extends CacheObject {

}

A::setCacheHandler('test');
var_dump(B::getCacheHandler());
B会给我“测试”,我相信这是因为A类没有它自己定义的属性$ handler ...所以它使用的是继承的,由B类共享。这是准确的吗?

有没有办法可以让它们单独设置,而不需要在每个对象中声明$ handler?

1 个答案:

答案 0 :(得分:0)

你的

public static function getCacheHandler($handler) { // No need to pass arg here
        return static::$handler;
    }

应该是

public static function getCacheHandler() {
        return static::$handler;
    }