web-dev-qa-db-ja.com

クラスをインスタンス化するために新しいステートメントを繰り返し使用しないようにする方法は?

私はたくさんの変数を持つクラスを持っています。変数を取得するには、各行にこの行を書く必要があります。

$x = new MY_Class();

私は別の方法がなければならないと思いますか?

私は試した:

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

それから、変数を必要とする他の関数で$x->varを使用しようとしましたが、うまくいきません。

global $xとその変数を他の関数からアクセス可能にするにはどうすればよいですか?ありがとうございます。

1
Jenny

上記のやり方でうまくいくはずです。変数がグローバルスコープで宣言されると、グローバルに利用可能になります(もちろん、あなたの関数はグローバル変数として宣言する必要があります:global $x;)。 $GLOBALSスーパーグローバル変数を使用することもできます。

global $x;
$x->var;

と同じです

$GLOBALS['x']->var;

私は個人的にあなたの関数で静的変数を使用するでしょう:

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

それからあなたのコードのどこにでも、あなたはただ$vars = my_data();を書くことができて、あなたのクラスの一つのインスタンス化を持つことができます。

それが役に立ったことを願っています!

2
John P Bloch