2

我有部分抽象基类看起来像这样:

abstract class Fragment_Cache {

    static $in_callback = false;

    abstract public function callback( $name, $args );
}

我需要在方法执行期间翻转$in_callback到。这用于代码的其他部分以防止缓存嵌套(所以我想缓存小部件和菜单,而不是小部件内的菜单)。truecallback()

但是,由于它是抽象方法,因此我不能依赖子类实现。

我也不能在方法调用周围打开/关闭标志,因为它是由不同的库传递和执行的,这些库负责异步运行它而不是在页面加载期间运行它。

我怎样才能在这个角落里建立自己?:)

建立它的召唤的实际怪物:

$output = tlc_transient( 'fragment-cache-' . $this->type . '-' . $name . $salt )
            ->updates_with( array( $this, 'callback' ), array( $name, $args ) )
            ->expires_in( $this->timeout )->get();
4

2 回答 2

5

将实际功能隐藏在另一个函数中怎么样?

abstract class Fragment_Cache {

    static $in_callback = false;

    public function callback($name, $args)
    {
        self::$in_callback = true;
        $this->doCallback($name, $args);
        self::$in_callback = false;
    }

    abstract protected function doCallback( $name, $args );
}

您需要覆盖doCallback,这将完成实际的繁重工作,但不能直接从外部访问,只能通过callback.

于 2013-06-05T21:24:25.137 回答
2
abstract class Fragment_Cache {

    static $in_callback = false;

    public function callback( $name, $args ){
        self::$in_callback = true;
        $ret = $this->__doCallback($name, $args);
        self::$in_callback = false;
        return $ret;
    }

    abstract protected function __doCallback($name, $args);
}
于 2013-06-05T21:28:23.617 回答