簡體   English   中英

如何實現抽象PHP方法的執行標志?

[英]How to implement flag for execution of abstract PHP method?

我有一些抽象基類,如下所示:

abstract class Fragment_Cache {

    static $in_callback = false;

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

我需要在callback()方法執行期間將$in_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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM