Extend a class of a plugin

时间:2017-06-15 作者:otinane

有一个插件使用一个类;并创建如下对象:

class WC_Disability_VAT_Exemption {

    public function __construct() {
        add_action( \'woocommerce_after_order_notes\', array( $this, \'exemption_field\' ) );
    }

    public function exemption_field() {
        //some code here
    }

}

/**
 * Return instance of WC_Disability_VAT_Exemption.
 *
 * @since 1.3.3
 *
 * @return WC_Disability_VAT_Exemption
 */
function wc_dve() {
    static $instance;

    if ( ! isset( $instance ) ) {
        $instance = new WC_Disability_VAT_Exemption();
    }

    return $instance;
}

wc_dve();
我想扩展该类,因为我想使用此方法删除操作:

class WC_Disability_VAT_Exemption_Extend extends WC_Disability_VAT_Exemption {

    function __construct() {
        $this->unregister_parent_hook();
        add_action( \'woocommerce_after_order_notes\', array( $this, \'exemption_field\' ) );
    }

    function unregister_parent_hook() {
        global $instance;
        remove_action( \'woocommerce_after_order_notes\', array( $instance, \'exemption_field\' ) );
    }

    function exemption_field() {
        //---some code here
    }
}
但是global $instance 未获取类对象。它返回null。那我怎么才能$instance 扩展类中的对象?

2 个回复
SO网友:otinane

Woocommerce支持部门向我发送了问题的解决方案:

function unregister_parent_hook() {
  if ( function_exists( \'wc_dve\' ) ) {
    $instance = wc_dve();
   remove_action( \'woocommerce_after_order_notes\', array( $instance, \'exemption_field\' ) );
    }
 }

SO网友:CodeMascot

你用过static 第一个函数中的关键字。关键字static 不会生成变量global. 它将确保变量只存在于该局部函数作用域中,但当程序执行离开该作用域时,它不会丢失其值。

因此,如果您尝试在第二个函数中访问global $my_class; 很明显会回来的null. 原因PHP 将处理global $my_class; 在第二个函数中,作为刚刚声明的新全局变量。

希望这有帮助。

结束