2012-01-11 22 views
0

私は筆記しているクラスを持っており、クラスの開始ごとに一度実行したいメソッドがあります。通常、これはコンストラクトメソッドに入りますが、すべてではなく特定のメソッドを呼び出すときに実行する必要があります。メソッドが現在のクラスでまだ実行されていない場合は、メソッドを実行しますか?

どのように私はこれを達成することをお勧めしますか?

答えて

3

デフラント値がFALSEのプライベートプロパティ$methodHasBeenRunを作成し、メソッド内でTRUEに設定します。方法の開始時に、実行します。あなたは場合

new example(); 

のようなクラスを作成し、それを実行しない場合

if ($this->methodHasBeenRun) return; 
$this->methodHasBeenRun = TRUE; 
+0

ありがとうございました! – ATLChris

-1

私は、このバージョン

class example { 
    function __construct($run_magic = false) { 
     if($run_magic == true) { 
      //Run your method which you want to call at initializing 
     } 
     //Your normale code   
    } 
} 

をお勧めしますしたい

new example(true); 
1

指定しなかった特定のメソッドが呼び出されたときに特定のメソッドを一度実行するだけの理由はありますが、何かをロードしたり初期化したりすることを想定しています(おそらくDBから来るデータ)。毎回廃棄サイクル。

@DaveRandomは、確かにうまくいく素晴らしい答えを提供しました。この作品

class foo { 
    protected function loadOnce() { 
      // This will be initialied only once to NULL 
      static $cache = NULL; 

      // If the data === NULL, load it 
      if($cache === NULL) { 
        echo "loading data...\n"; 
        $cache = array(
          'key1' => 'key1 data', 
          'key2' => 'key2 data', 
          'key3' => 'key3 data' 
        ); 
      } 

      // Return the data 
      return $cache; 
    } 

    // Use the data given a key 
    public function bar($key) { 
      $data = $this->loadOnce(); 
      echo $data[$key] . "\n"; 
    } 
} 

$obj = new foo(); 

// Notice "loading data" only prints one time 
$obj->bar('key1'); 
$obj->bar('key2'); 
$obj->bar('key3'); 

理由は、あなたがstaticとして、あなたのキャッシュ変数を宣言することである:ここではあなたがそれを行うことができます別の方法があります。これを行うにはいくつかの異なる方法があります。それをクラスのメンバー変数にすることができます。

関連する問題