8

ユーザーがサイト設定の一部を変更できるようにするアプリを作成しています。さまざまなプラグインにさまざまなオプションを送信してコードを生成するフォームジェネレーターを構築しているだけです。多次元配列ではなく、これにオブジェクトを使用する必要があるかどうか疑問に思っていますか? もしそうなら、どうすればコードを変更できますか?

だから今、私はこれを作った - 非常に長く、長くなりそうなので、簡潔にするためにその一部だけを貼り付けた: -

$scopeSettings = array(
    'site_background' => array(
        'subpanels' => array(
            'colour' => array(
                'plugins' => array(
                    'colourchooser' => array(
                        'tip' => "The background colour appears underneath the 'Background Image' (if set)-hover over the '?' around the colour chooser for extra tips on how to use it",
                        'element' => 'body',
                        'gradientenabled' => 'true',
                        'opts' => array (
                            'closed' => 'true',
                            'advanced' => array(
                                'tip' => "You can paste in your own generated gradient codes in here",
                                'checkbox' => true
                            )//end advanced
                        )//end Opts
                    )//end colour chooser
                )//end plugins
            ),//end colour sub panel
            'pattern' => array(
                'plugins' => array(
                    'patternselector' => array(
                        'tip' => "Use the pattern selector to apply effects like moire or scan lines to your background image",
                        'element' => 'patimg'
                    )//end patternselector
                )//end plugins
            ),//end pattern sub panel
        )//end subpanels
    )//end site background
);//end scope settings

この種のベストプラクティスは何でしょうか?

4

7 に答える 7

4

これはばかげているかもしれませんが、アプリケーションの構成形式として「YAML」または「JSON」を使用できますか?

たとえば、Symfony やその他のフレームワークなど。

于 2012-04-27T14:17:09.583 に答える
1

設定を<insert your markup language of choice>(XML、JSON、YAMLなど)に保存します。

次に、これらを変数にキャッシュし、$_SESSIONブートストラップ時にまだ存在しない場合はデータを入力できます。

session_start();

if (!isset($_SESSION['settings'])) {
    // Assuming you choose JSON...
    $settings = json_decode(file_get_contents('settings.json'), TRUE);
    $_SESSION['settings'] = $settings; // array
    $_SESSION['settings'] = (object)$settings; // object
}

配列またはオブジェクトを使用するかどうかは、どのアクセス構文を使用するかによって決まります。

$_SESSION['settings']['site_background']['subpanels']['colour']...
// vs.
$_SESSION['settings']->site_background->subpanels->colour...
于 2012-04-27T14:24:04.043 に答える
1

私のアドバイス: YAMLまたは XML またはJSONを試して、より読みやすい構成ファイルを取得し、それを解析して独自のコードの配列に戻します。

于 2012-04-27T14:20:08.143 に答える
0

配列指向プログラミングが好きな人もいれば、PHP 5.4 を使って自分自身を素晴らしい方法で表現できる人もいます。しかし、より多くの人が OOP に慣れており (私もそうです)、ソリューションをコーディングするためのより読みやすい方法になる可能性があります。

于 2012-04-27T14:13:14.500 に答える
0

ここにいる他の人々のように、私の意見は YAML または JSON を使用することです。これを使用すると、非常に簡単な方法で実行できます。

たとえば、データ構造の JSON 形式の例:

var settings = {
    'site_background' : {
        'subpanels' : {
            'colour' : {
                'plugins' : {
                    'colourchooser' : {
                        'tip' : "The background colour appears underneath the 'Background Image' (if set)-hover over the '?' around the colour chooser for extra tips on how to use it",
                        'element' : 'body',
                        'gradientenabled' : 'true',
                        'opts' : {
                            'closed' : 'true',
                            'advanced' : {
                                'tip' : "You can paste in your own generated gradient codes in here",
                                'checkbox' : true
                            }//end advanced
                        }//end Opts
                    }//end colour chooser
                }//end plugins
            },//end colour sub panel
            'pattern' : {
                'plugins' : {
                    'patternselector' : {
                        'tip' : "Use the pattern selector to apply effects like moire or scan lines to your background image",
                        'element' : 'patimg'
                    }//end patternselector
                }//end plugins
            }//end pattern sub panel
        }//end subpanels
    }//end site background
};//end scope

JSON <-> PHP データ変換には、json_encode や json_decode などの PHP 関数を使用できます。中括弧を使用すると、要素がオブジェクトであり、 [ および ] に置き換えると配列が得られることを意味します...

しかし、特に拡張性を使用する場合は、PHP OOP アプローチもうまく使用できます。1 つのメイン クラス Settings にいくつかのデフォルト プロパティと、たとえばマジック __get および __set 関数を持たせ、このメイン Settings クラスから拡張する多くのサブ設定サブクラスを実装できます。

于 2012-04-27T14:52:24.243 に答える
0

このルートでは、構造化されたオブジェクト指向のルートを使用すると思います。すべての子オブジェクト (設定グループ) を保持する親オブジェクトを持つことができ、設定グループを独自のオブジェクトとして取得することもできます。各オブジェクトには独自の定義とプロパティがあり、IDE 内で有用な情報を提供するコードで文書化できます (docblock を使用する場合)。

于 2012-04-27T14:21:13.490 に答える
0

オブジェクトを使用します。フォームを作成していると仮定すると、いくつかのクラスが必要です。

  • Form-フォームを保持するには、プロパティがあります$input_list(または$node_listすべての入力を保持します
  • Input- 単一の入力項目を記述するにはlabeltypetipなどのプロパティが必要です。
  • Fieldset- フィールドセットを記述し、内部に追加のアイテムを保持します。Formクラスと同様に、$input_listすべての入力を内部に保持する必要があります。

これらのクラスはスタンドアロンにすることができ、カスタマイズされた共通の入力タイプを持つように拡張することができます (たとえば)

class Checkbox extends Input {
    public $type = 'checkbox'
    ....
}
于 2012-04-27T14:25:09.143 に答える