php - 如何实现用于执行抽象 PHP 方法的标志?

标签 php abstract

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

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

关于php - 如何实现用于执行抽象 PHP 方法的标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16950035/

相关文章:

php - 如果数据库中有3个不同的字段名称,如何搜索全名?

java - 如何调用重写的抽象类方法

java - 泛型抽象类构造函数

php - Laravel + React,通过 Laravel 身份验证使用 api

php - 将 js 数组传递给 PHP

java - "extends"实际上是做什么的?

c++ - 防止类被实例化

Scala:扩展参数化类时处理不同的构造函数

php - 当 table1 中删除行时,在 table2 中插入行

javascript - 使用脚本添加两个同名的数组值