2012-04-27 11 views
8

私は、ユーザがサイト設定のいくつかを変更したり変更したりできるようにするアプリケーションを書いています。私は多次元配列ではなく多次元配列にオブジェクトを使用する必要があるかどうかを疑問視しているコードを生成するために、多様なプラグインにさまざまなオプションを送信するフォームジェネレータを構築しています。もしそうなら、どのように私のコードを変更するのですか?PHPオブジェクトまたは配列

$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 

この種とベストプラクティスがどうなるか - :私はその非常に長いthis-作られ、長く得ようとしているので、今私が唯一の簡潔さのために、それの一部を貼り付けている

ものの?

答えて

0

私は、Array Oriented Programmationのようなものと、PHP 5.4を使って彼ら自身をすばらしいやり方で表現できると言います。 しかし、より多くの人々がOOPに慣れています。私はそうしています。そして、あなたのソリューションをコード化するより読みやすい方法かもしれません。

4

多分これは愚かですが、アプリケーションの設定形式として「YAML」または「JSON」を使用できますか?

例えばSymfonyまたは他のフレームワークのように。

+0

実際には良いと思いますが、私はJSONが好きです...;)そして、私はPHPとjsの間でそれをやり直すことができます。 –

1

私はアドバイスを:YAMLまたはXMLまたはJSONを読んで、読みやすい設定ファイルを取得してから、自分のコードの配列に解析して戻してください。

0

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

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... 
0

私はオブジェクトを使用します。フォームを作っている、あなたはいくつかのクラスが必要と仮定:

  • Formを - 単一入力を記述するために - フォームを保持するために、入力
  • Inputのすべてを保持するプロパティ$input_list(または$node_listを持っていますアイテムは、それが、typelabelのような性質を持っている必要がありtipなど
  • Fieldset - 。Formクラスと同じように、それはinsid入力のすべてを保持するために$input_listを持っているでしょう内部の追加アイテムを保持するために、フィールドセットを記述するためにそれのe。

これらのクラスは、(例えば)の他の人のよう

class Checkbox extends Input { 
    public $type = 'checkbox' 
    .... 
} 
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 <ためjson_encodeとjson_decodeのようなPHPの関数を使用することができます - > PHPのデータ変換。中括弧を使用することは、要素がオブジェクトであることを意味しますが、配列がある場合は配列に置き換えられます。

また、PHP OOPアプローチは、特に拡張性を使用する場合には特に有効です。 1つのメインクラスを持つことができます。 magic __getと__set関数を呼び出すと、このメインSettingsクラスから拡張された多くのサブセットサブクラスを実装できます。

関連する問題