2017-09-05 4 views
1

PHP 5.6を使用しており、この特定のアプリケーションでは今後12〜18ヶ月以内に7.0に移行します。PHP配列または関数 - このシナリオではより効率的です

大規模なグローバル設定ファイルがあります。これは、100変数に近づいています(それぞれのアップデートはさらに増えています)。期待どおり、この設定ファイルはアプリケーションのすべてのスクリプトページによって呼び出されますが、すべての場合にすべての設定値が使用されるわけではありませんが、便宜上、すべて同じファイルに格納します。

しかし、おそらく関数に値を格納する方が効率的だと思っていましたが、私はPHP言語(または他の言語)のアーキテクトではないので、関数を使用する方が効率が良く、少ない効率的な、またはかなり多くの違いはありません。

ここでは、シナリオの例を示します。私たちの設定ファイルでは、我々はこのようなものがあります:

$g['user']['enable_username_change'] = true; 
$g['user']['enable_image_change'] = true; 
$g['user']['display'] = "[LASTNAME], [FIRSTNAME]"; 
$g['user']['sort_by'] = "[LASTNAME]"; 
$g['user']['default_locale'] = "english"; 
$g['user']['profile_page'] = file_get_contents('profile_template.html'); 

をこれらの値は、すべてのスクリプトに利用可能であるが、ほんの一握りは、それらを必要とします。もちろん私たちはこのような何かをすることによってそれらにアクセス:次に

function user__getGlobalConfig($in_param_name) { 
    // DEFINE THE VALUES 
    $g['user']['enable_username_change'] = true; 
    $g['user']['enable_image_change'] = true; 
    $g['user']['display'] = "[LASTNAME], [FIRSTNAME]"; 
    $g['user']['sort_by'] = "[LASTNAME]"; 
    $g['user']['default_locale'] = "english"; 
    $g['user']['profile_page'] = file_get_contents('profile_template.html'); 

    if (isset($g['user'][$in_param_name] == true) { 
     return $g['user'][$in_param_name]; 
    } else { 
     return false; 
    } 

} 

:だから私はこのような何かを実行して(それがより効率を作成している場合)、これは動作方法を変更することを考えていた

if ($g['user']['enable_username_change'] == true) { 
    // the code to enable it ... 
} 

だから、のfile_get_contents()関数が呼び出されたときの値のみ私は、より効率的であると信じている、読み込まなるだろう入力し、私はミリアンペアように思わ

if (user__getGlobalConfig('enable_username_change') == true) { 
    // the code to enable it ... 
} 

:我々はこのようにそれにアクセスしますyは間違っている。他の真偽/単純なテキストベースの値は、大きな効率向上にはならないと思われますが、ここでは、なぜ一方的な方法が他の方法よりも効率的であるかに関する科学的または事実に基づく推論を挙げています。

ありがとうございました。

+0

あなたのアプリは現在苦しんでいますか、それとも気まずいですか? – deg

+0

設定変数を文字どおりに移動する__changes nothing__関数内に同じ値の配列を宣言しています。そして、あなたの関数を呼び出すたびに、配列が再作成されます。 –

+0

必ずしも苦しんではいませんが、設定ファイルが大きくなるにつれて、可能な限り効率的にものを作りたいと思います。 – OneNerd

答えて

2

関数アプローチを使用する場合は、静的変数を使用して設定をキャッシュするたびに配列を再作成しないようにコードを作成する必要があります。特に、設定を検索するたびにfile_get_contents()に電話する必要はありません。

function user__getGlobalConfig($in_param_name) { 
    static $g; 
    if (!isset($g)) { 
     $g = array(); 
     // DEFINE THE VALUES 
     $g['user']['enable_username_change'] = true; 
     $g['user']['enable_image_change'] = true; 
     $g['user']['display'] = "[LASTNAME], [FIRSTNAME]"; 
     $g['user']['sort_by'] = "[LASTNAME]"; 
     $g['user']['default_locale'] = "english"; 
     $g['user']['profile_page'] = file_get_contents('profile_template.html'); 
    } 
    if (isset($g['user'][$in_param_name])){ 
     return $g['user'][$in_param_name]; 
    } else { 
     return false; 
    } 
} 
関連する問題