如何实现抽象PHP方法的执行标志



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

abstract class Fragment_Cache {
    static $in_callback = false;
    abstract public function callback( $name, $args );
}

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

然而,由于它是抽象方法,我不能依赖于子类实现。

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

我怎样才能走出这个角落?:)

设置调用的实际怪物:

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

如何将实际功能隐藏在另一个函数中?

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

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);
}

最新更新