web-dev-qa-db-fra.com

Comment éviter à plusieurs reprises d'utiliser la nouvelle instruction pour instancier une classe?

J'ai une classe avec beaucoup de variables. Pour obtenir une variable, je dois écrire cette ligne dans chaque fonction:

$x = new MY_Class();

Je suppose qu'il doit y avoir un autre moyen?

J'ai essayé:

function my_data(){
global $x;
$x = new MY_Class();
return apply_filters( 'my_data', $x )
}

Ensuite, j'ai essayé d'utiliser $x->var dans d'autres fonctions nécessitant des variables, mais cela ne fonctionne pas.

Comment puis-je rendre le global $x et ses variables accessibles par d'autres fonctions? Merci!

1
Jenny

La façon dont vous l'avez fait ci-dessus devrait fonctionner. Une fois qu'une variable est déclarée dans la portée globale, elle devrait être disponible globalement (bien sûr, vos fonctions doivent toujours la déclarer comme globale: global $x;). Vous pouvez également utiliser la variable super-globale $GLOBALS:

global $x;
$x->var;

est le même que

$GLOBALS['x']->var;

Personnellement, j'utiliserais une variable statique dans votre fonction:

function my_data(){
  static $data = null;
  if(null === $data)
    $data = new MY_Class();
  return $data;
}

Ensuite, n'importe où dans votre code, vous pouvez simplement écrire $vars = my_data(); et avoir l'instanciation de votre classe.

J'espère que ça a aidé!

2
John P Bloch