这意味着类的实例正在传递给过滤器回调。如果类实例包含您可能希望在过滤器中重复使用的属性和方法,这可能很有用。以类为例:
class MyClass {
public function complicated_process( $value ) {
// Do something complex with $value.
return $value;
}
public function filterable_process( $raw_value ) {
$value = $this->complicated_process( $raw_value );
return apply_filters( \'my_class_filter\', $value, $raw_value, $this );
}
}
这个类有一个方法,
filterable_process()
它接受原始值,使用另一种方法(
complicated_process()
) 以某种方式更改它,然后返回已处理的值。但是,它还有一个WordPress过滤器,允许您修改返回值。我们可以使用这样的过滤器来添加
1
返回值:
add_filter(
\'my_class_filter\',
function( $value ) {
return $value + 1;
}
);
但是如果我们想添加
1
对于原始值,将运行复杂的进程。仅通过筛选
$value
, 因为它已经被处理过了。然而,在本例中,过滤器还将原始值传递给回调函数,以及
MyClass
(
$this
). 这允许我们使用
complicated_process()
方法,因为我们可以访问原始类实例:
add_filter(
\'my_class_filter\',
function( $value, $raw_value, $my_class ) {
$value = $raw_value + 1;
$value = $my_class->complicated_process( $raw_value );
return $value;
},
10,
3
);
请注意,自
$this
是一个保留变量,我在回调函数中接受了类实例,并使用代表该类的变量名。
因此,在您的示例中woocommerce_xero_invoice_to_xml
过滤器传递可以过滤的XML,如下所示$xml
, 但它也传递了可能产生XML的类的实例。这取决于类外的细节(这些细节是第三方的,因此与主题无关),在过滤XML时可能很有用。你只需要给它一个不同的变量名$this
.