私は筆記しているクラスを持っており、クラスの開始ごとに一度実行したいメソッドがあります。通常、これはコンストラクトメソッドに入りますが、すべてではなく特定のメソッドを呼び出すときに実行する必要があります。メソッドが現在のクラスでまだ実行されていない場合は、メソッドを実行しますか?
どのように私はこれを達成することをお勧めしますか?
私は筆記しているクラスを持っており、クラスの開始ごとに一度実行したいメソッドがあります。通常、これはコンストラクトメソッドに入りますが、すべてではなく特定のメソッドを呼び出すときに実行する必要があります。メソッドが現在のクラスでまだ実行されていない場合は、メソッドを実行しますか?
どのように私はこれを達成することをお勧めしますか?
デフラント値がFALSE
のプライベートプロパティ$methodHasBeenRun
を作成し、メソッド内でTRUE
に設定します。方法の開始時に、実行します。あなたは場合
new example();
のようなクラスを作成し、それを実行しない場合
if ($this->methodHasBeenRun) return;
$this->methodHasBeenRun = TRUE;
私は、このバージョン
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);
指定しなかった特定のメソッドが呼び出されたときに特定のメソッドを一度実行するだけの理由はありますが、何かをロードしたり初期化したりすることを想定しています(おそらく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
として、あなたのキャッシュ変数を宣言することである:ここではあなたがそれを行うことができます別の方法があります。これを行うにはいくつかの異なる方法があります。それをクラスのメンバー変数にすることができます。
ありがとうございました! – ATLChris