2015-12-26 16 views
5

こんにちは皆とメリークリスマス!静的クラスでデータを保存する[PHP]

私は効率に問題があります。私はStackOverflowコミュニティが助けてくれることを願っています。

私の(静的な)クラスの1つでは、データベースから大量の情報を取り出し、その情報を解析し、フォーマットされた配列に格納する関数を持っています。このクラス内の多くの関数は、そのフォーマットされた配列とクラス全体に依存しています。私はそれを何度か呼び出します。つまり、アプリケーションはこのプロセスを1回で複数回実行します。だから私はこれを行うことについて行くことができるより効率的な方法があるのだろうかと思っています。私がフォーマットされた配列から情報を必要とするたびにプロセス全体をやり直す必要がないように、静的関数内にフォーマットされた配列を格納する方法はありますか?

private static function makeArray(){ 
    // grab information from database and format array here 
    return $array; 
} 

public static function doSomething(){ 
    $data = self::makeArray(); 
    return $data->stuff; 
} 

public static function doSomethingElse(){ 
    $data = self::makeArray(); 
    return $data->stuff->moreStuff; 
} 
+0

からの検索を強制したい場合は、 'makeArray(の結果である)すべての呼び出しで'いつも同じ?そうであれば、それを静的プロパティにキャッシュして、すでに読み込まれている場合はそれを返すことができます。 –

+0

データベース内のデータが更新された場合(頻繁に発生することはなく、手動で行われた場合)、makeArray()の結果が変更されるため、キャッシュすることは良い選択です。私はそのような結果をキャッシングするように提案しますか? – camrymps

答えて

3

makeArray()の結果は、スクリプトの1つの実行中に変化し、それが検索される最初の時間の後にクラスの静的プロパティでの結果をキャッシュを検討することが期待されていない場合。これを行うには、変数が空であるかどうかを確認します。そうであれば、データベースアクションを実行して結果を保存します。空でない場合は、既存の配列を返します。

さらに、ブール型パラメータを関数に追加して、新しい配列のコピーを強制することさえできます。

// Add a boolean param (default false) to force fresh data 
private static function makeArray($fresh = false) { 
    // If still empty OR the $fresh param is true, get new data 
    if (empty(self::$array) || $fresh) { 
    // grab information from database and format array here 
    self::$array = array(...); 
    } 
    // Return it - maybe newly populated, maybe cached 
    return self::$array; 
} 

あなたのすべての他のクラスのメソッドは、あなたがすでに行っているようself::makeArray()を呼び出し続けることができます。

public static function doSomething(){ 
    $data = self::makeArray(); 
    return $data->stuff; 
} 

あなたは、オプションの新鮮なパラメータを追加し、データベース

public static function doSomething(){ 
    // Call normally (accepting cached values if present) 
    $data = self::makeArray(); 
    return $data->stuff; 
} 
public static function doSomethingRequiringRefresh(){ 
    // Call with the $fresh param true 
    $data = self::makeArray(true); 
    return $data->stuff; 
} 
関連する問題