我正在编写一个插件,在添加钩子时,我发现我必须一遍又一遍地为每个子类编写相同的过滤器。因此,如果 B、C 和 D 是 AI 的孩子,则必须使用“b_dosomething”、“c_something”和“d_something”的键制作一个过滤器,以便让孩子们接受这个过滤器。
有没有办法更通用地做到这一点?但只是添加'dosomething'并传递一些东西......也许?
在 A 类中创建一个函数
class A {
public function __construct()
{
$this->apply_filters();
}
public function apply_filters()
{
if(!method_exists($this, 'filter_callback'))
return;
apply_filter('your_filter_here', array($this,'filter_callback'));
}
}
现在子类,如果你有函数'filter_callback',那么过滤器将被应用。
class B extends A{
public function __construct()
{
parent::__construct;
}
public function filter_callback()
{
//do something
}
}
这样,您不必承担重复调用 appply_filter() 的开销。
希望这能回答你的问题