![](/img/trans.png)
[英]PHP 7, Symfony 3: Fatal error 1 abstract method and must therefore be declared abstract or implement the remaining methods
[英]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.