19

プロジェクトごとに通常変更されるさまざまな構成値を保持するconfig.phpファイルを作成し、次のようにこのファイルの構成値を保持するクラスを定義します。

class Config {
    const DB_SERVER    = 'localhost',
          DB_NAME      = 'abc',
          DB_USERNAME  = 'admin',
          DB_PASSWORD  = '12345',

          WEBSITE_NAME = 'My New Website',
          IMAGE_DIR    = 'img';
}

など、すべての値をクラス内の定数として定義したいので、次のように呼び出します。

$connection = mysql_connect(Config::DB_SERVER, Config::DB_USERNAME, Config::DB_PASSWORD) or die("Database connection failed..");

知りたい:プロジェクト構成を設定するこの方法は正しいですか?この方法には短所がありますか?そしてそれが間違っていた場合、これを行うための最良の方法は何ですか?

4

3 に答える 3

11

はい、それはそれを行う一つの方法です。それほど悪くない方法、IMO。基本的に、クラスはPHP構文だけで構成ファイルになります。

ただし、いくつかの欠点があります。

  • const配列またはオブジェクトを持つことはできません。(もちろん、グローバル定数配列/オブジェクトも使用できないので...)(5.6以降、定数配列を使用できます。ただし、constオブジェクトは使用できません。constリソースも使用できないと確信しています。 、それはあまり意味がないので。)

    これを回避するには、オブジェクトに静的ゲッターを実装します(もちろん、常に同じオブジェクトを返すようにコード化されています)...しかし、ほとんどの場合、これを避けることをお勧めします。構成内のオブジェクトが設計上不変である場合にのみ、これは安全なオプションです。(不変性のために設計されていないオブジェクトは、偶然であっても、変更するのが非常に簡単です。)

    (可変性の問題は別として、設定ファイルに実際に実行中のコードがあるとバグが発生します...しかし、それはほとんど個人的な好みです。)

  • このクラスの目的は他のクラスとは異なります。プロジェクトごとに変更することを目的としています。Configクラスは、通常は構成ファイルを保持する場所のように、他のクラスとは別の場所に保持することを検討してください。

  • 実際の構成ファイルでは、実行時に解析するため、欠落または無効なファイルを処理できる可能性があります(たとえば、デフォルト設定で実行したり、解析可能な部分を使用したり、有用なエラーメッセージを表示したりします)。ただし、構成がPHPコードとして実行されると、構文エラー(または、それを考慮していない場合は、Configクラスが欠落している)があると、アプリが停止します。また、オフで実行している場合display_errors(本番環境で推奨)、問題はそれほど明白ではない可能性があります。

于 2012-08-16T22:10:12.393 に答える
8

同じトピックについて話しているこれらの2つの記事を見つけました。それらは非常に役立つことがわかったので、ここで共有したいと思います。

1- PHPクラスを使用して構成データを保存する
2 -PHPクラスを使用して構成を保存する

彼らが私のためにしたように彼らが助けてくれることを願っています。

于 2012-08-16T20:22:08.147 に答える
2

欲しいのは静的キーワードだと思います!

class Config {
    static $DB_SERVER    = 'localhost';
    static $DB_NAME      = 'abc';
    static $DB_USERNAME  = 'admin';
    static $DB_PASSWORD  = '12345';

    static $WEBSITE_NAME = 'My New Website';
    static $IMAGE_DIR    = 'img';
}

そのように。::たとえば、でそれらを呼び出すことはできませんConfig::$DB_SERVER

ところで。通常、クラス変数の場合、そのように大きく書くことはありません。通常、ビッグはグローバルを意味します。

于 2012-06-11T21:25:24.897 に答える