1

私はPHPにそれほど精通しておらず、次の問題に対する最善の解決策を探しています。

  • スクリプトに関する重要な情報を保持するPHP配列があります。

スクリプトでこれを頻繁に再利用する必要があります。

$my_settings = array('width'=>'300', 'height'=>'200', ...);
  • 私はそれをMySQLデータベースに保存します。

  • PHPスクリプトは、ビューの構成方法を知るために、実行するたびにMySQLからその配列を取得する必要があります。

(配列は最終的にかなり大きくなります...多分数百行...)

スクリプトの最初でこの配列を1回だけ取得して定義し、他の関数などでいつでも再利用できるようにするためのベストプラクティスは何ですか?

それはグローバルに定義することによるものですか?

global $my_settings;
$my_settings = get_my_settings_from_db();

function returnSetting($key='') {
 global $my_settings;
 return $my_settings[$key];

}

それともこれは悪い考えですか?

それを行うための最も効率的な方法は何ですか?

ありがとう!

4

5 に答える 5

4

使用する代わりにglobal(これは悪いことです)、変数を注入する必要があります(または、必要な部分をそれを必要とする関数に注入する必要があります)。

$my_settings = get_my_settings_from_db();

function returnSetting($settings, $key='') {
     return $settings[$key];
}

returnSetting($my_settings, $key);

または、設定クラスを作成する方がよいでしょう。

class Settings
{
    protected $settings;

    public function __construct($settings)
    {
        $this->settings = $settings;
    }

    public function getSetting($key)
    {
        return $this->settings[$key];
    }
}

// you only create one instance per request, so you would do this in for example your bootstrap file
$settings = new Settings($my_settings);

次のような設定が必要なクラスがあるとします。

class Foo
{
    protected $settings;

    public function __construct($settings)
    {
        $this->settings = $settings;
    {

    public function bar()
    {
        // do something which requires a setting
        echo $this->settings->getSetting('dimensions');
    }
}

$settings = new Settings($my_settings);
$foo = new Foo($settings);
$foo->bar();

これを行うと、コードのテストと保守が容易になります。

これは私が片手にビールを使って書いたものであり、テストされていないことに注意してください。:-)

于 2012-07-31T15:21:00.150 に答える
0

次のような最初のグローバルは必要ありません。

$my_settings = get_my_settings_from_db();

function returnSetting($key='') {
 global $my_settings;
 return $my_settings[$key];

}
于 2012-07-31T15:16:44.870 に答える
0

グローバルはいいです!<-今日が2002年7月だったら私が言うことです

しかし、2012年には、グローバルはすべての忍者開発者によって殺されなければなりません。

これには静的変数を使用してみてください。

class DataCollector{
    static $my_settings = array('width'=>'300', 'height'=>'200');
}

//You could use the values at ANY place or function
echo DataCollector::$my_settings['width'];

OOPの基本についても読んでください。

于 2012-07-31T15:18:19.520 に答える
-1

$GLOBALS['my_settings']を使用します

$ GLOBALは、グローバルスコープから変数にアクセスするために「global」キーワードの代わりに使用できるphpスーパーグローバル変数です。つまり、関数またはメソッド内であっても、phpスクリプトのどこからでもアクセスできる変数です。

$my_settings = array('width'=>'300', 'height'=>'200', ...);
function blablabla() {
  $b = $GLOBALS['my_settings'] ;
  echo $b ;
}
于 2017-10-05T09:06:12.557 に答える
-2
function getSettings($id, $type) {
if(!$id == 0) {
$sql = "SELECT * FROM 'database' WHERE 'id' = '".$id."'";
$result = mysql_query($sql);

if(mysql_num_rows($result) == 0) {
while($row = mysql_fetch_assoc($result)) {
if($type == "setting1") {
        return $row['setting1'];
    } elseif($type == "setting2") {
        return $row['setting2'];
    } elseif($type == "setting3") {
        return $row['setting3'];
    } elseif($type == "setting4") {
        return $row['setting4'];
    } else {
        return "Wrong Input";
        }
} } else { return "Not Initialized";}
else { return "No $id input"; }}}

ログインを保存し$_SESSIONて、getSetting($_SESSION['id'], "setting1")

于 2012-07-31T15:32:59.897 に答える