6

PHP 開発に数年携わった後、「グローバル スコープ データ」(グローバル、定数、ini/XML/YML ファイル、データベース、シングルトン プロパティなど) を保存するさまざまな方法を見たり聞いたりしました。

「グローバル スコープ データ」とは、次のことを意味します。

  • などのグローバル アプリケーション/プロジェクト設定
    • データベース構成
    • SMTP、FTP パラメータ
  • データベース識別子 (例: DB で定義された特定の言語または国の主キー値)
  • などのグローバル ランタイム設定
    • ロギング/デバッグを有効にする
    • 環境はdev/test/prod

...一度取得すると変更されることは想定されておらず、プロジェクトコードのどの部分でも簡単に到達できる必要があります。

一部のグローバル データは、連想配列として格納する必要がある場合があります (したがって、定数として宣言することはできません)。
例: 言語ごとの日付形式。ところで、配列定数に関するこの他のSOの質問を見ましたがunserialize、配列定数値が必要なあらゆる場所で使用するよりも読みやすいものはありませんか?

私の主な質問は、グローバル スコープ データを適切に (つまり、クリーンで、読み取り可能で、信頼できる) 保存するために推奨する方法と、その理由 (長所/短所) です。

ありがとう。

4

4 に答える 4

2

お好みの方法で設定を保存できます。私は PHP 配列や INI ファイルが好きです。

それができたら、グローバルに使用できるアクセサ クラスをコーディングします。必要に応じてシングルトンにすることもできますが、実際には必須ではありません。

このクラスは設定ストアを解析し、内部データ構造を作成します。データが上書きされないように、そこにセッターがないことを確認してください。Zend がその Zend_Config クラスを実装する方法を見てみましょう。これは私が話していることです: http://framework.zend.com/manual/en/zend.config.html

いつでも設定にアクセスできるように、アクセサー クラスがグローバルに利用できることを確認してください。

于 2011-04-22T12:31:21.907 に答える
2

config の最も頻繁な実装については、Zend_Configを参照してください。

  • 配列(php のみ、即時だが散らばっていて読みにくい)
  • ini (手書きで読み書きしやすい)
  • xml (冗長で扱いにくいが非常に柔軟)
  • json (非常に読みやすく、js 経由でも直接アクセスしたい場合に最適です)
  • yaml (基本的にシリアライズした配列を直接書く)

もちろん、配列は純粋な PHP であり、特別なパーサーやライターを必要としないため、最も直接的で単純なソリューションに見えるかもしれません。

一方、他の形式にも明らかな利点があります。Zend_Config のドキュメントには、たとえば ini ファイルについて書かれています。

INI 形式は、構成データ キーの階層を持つ機能と構成データ セクション間の継承の両方を提供するように特化されています。構成データ階層は、ドットまたはピリオド文字 (".") でキーを区切ることによってサポートされます。

次の理由により、定数の使用はお勧めできません。

  1. アプリケーションは常にすべての設定オプションを確認する必要はありません。
  2. さらに重要なことは、定数をネストすることはできず、ネストは構成にとって非常に重要なことです。
于 2011-04-22T13:05:03.937 に答える
1

parse_ini_file

; This is a sample configuration file
; Comments start with ';', as in php.ini

[first_section]
one = 1
five = 5
animal = BIRD

[second_section]
path = "/usr/local/bin"
URL = "http://www.example.com/~username"

; This is an array
[third_section]
phpversion[] = "5.0"
phpversion[] = "5.1"
phpversion[] = "5.2"
phpversion[] = "5.3"

また、これをINIファイル(ファイルの最初の行)に追加すると、安全性を維持するのに役立ちます。

;<?php die("<br /><br /><br /><br /><br /><h3>404 Not Found</h3><br /><br />The requested resource could not be found."); ?>
;Secure INI file
于 2011-04-22T12:33:55.473 に答える