Il y a un plugin qui utilise une classe; et créez un objet comme celui-ci:
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();
Je veux étendre la classe parce que je veux utiliser cette méthode pour supprimer une action:
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
}
}
Mais global $instance
n'obtient pas l'objet de classe. Il retourne null . Alors, comment puis-je obtenir l'objet $instance
dans la classe étendue?
Le support de Woocommerce m'a envoyé la solution de mon problème:
function unregister_parent_hook() {
if ( function_exists( 'wc_dve' ) ) {
$instance = wc_dve();
remove_action( 'woocommerce_after_order_notes', array( $instance, 'exemption_field' ) );
}
}
Eh bien, vous avez utilisé static
la clé Word dans la première fonction. Le mot clé static
ne créera pas la variable global
. Il s'assurera que la variable n'existe que dans l'étendue de la fonction locale, mais ne perd pas sa valeur lorsque l'exécution du programme quitte cette étendue.
Donc, si vous essayez d'accéder à la deuxième fonction du global $my_class;
, il retournera évidemment null
. Cause PHP traitera le global $my_class;
de la deuxième fonction comme une nouvelle variable globale qui vient d'être déclarée.
J'espère que cela pourra aider.