2016-04-04 6 views
10

今私は、プロジェクトで一定量の文字列と列挙型を大量に使用しています。私は「定数」クラスが含まれているので、PHPで定数を保持する方法

class Constants implements iStatuses, iEmailTypes { 
} 

interface iStatuses { 
    const STATUS_NEW = 1; 
    cosnt STATUS_UPDATED =2; 
    ... 
} 

interface iEmailTypes { 
    const EMAIL_TYPE_NEW = 1; 
    const EMAIL_TYPE_UPDATED =2; 
    ... 
} 

このアプローチは、私は、コード内の任意の場所に次のように私の定数を取得することができ:それの初め以来、私は(擬似PHPのコード例)以下のアプローチを使用していましたindex.php。

$this->sendEmailByType(CONSTANTS::EMAIL_TYPE_NEW); 

しかし、私は完全なアプローチのマイナス面を見ることができます:

  1. 定数クラスは、列挙型と定数の多くとオーバーロードされ、右の定数を取得することは非常に困難です。命名規則は、それを解決するのに役立ちますが、それは私が
  2. 定数クラスが大きすぎると、私はされて、すべてのインターフェイスの追跡を維持する必要が
  3. 厄介である必要がある一定のものを識別するために、追加的な思考を必要とするので、私は、これが好きではありませんCosntantsクラスで実装されています。

私のプロジェクトはますます大きくなり、別のプロジェクトのコードとマージする必要があるため、クラスの定数アプローチを変更する必要があります。しかし、私はそのクラスに基づいてあまりにも多くの依存関係を持っています。定数クラスの値を使用する古いコードを壊さないために、どのように再構築するべきですか?

あなたの考えや提案、私の「定数」アプローチを改善する方法、またはそれがうまくいくことを確認して、それをサポートしてください。

ありがとうございます。

+0

あなたの構造の残りの部分を知らなくても答えにくいですが、その領域を扱う関連するコントローラ(またはエンティティ)クラスの先頭に定数を配置します。 – DevDonkey

+0

多くのコントローラで共有定数を使用したい場合はどうすればよいですか? –

+4

すべての定数を 'Constants'クラスの下に置くことは厳しい要求ですか?私は各クラスに関連する定数が代わりにそのクラスを介してアクセス可能であることを期待しています(組み込みのPHP定数がどのように存在するか)。 – apokryfos

答えて

11

なぜ、各コンテキストに対して定数クラスを持つだけではないのですか。すなわち

class Statuses 
{ 
    const STATUS_NEW = 1; 
    const STATUS_UPDATED =2; 
    ... 
} 

class EmailTypes 
{ 
    const EMAIL_TYPE_NEW = 1; 
    const EMAIL_TYPE_UPDATED =2; 
    ... 
} 

後でまたは他のプログラマは、彼らが簡単代わりに定数の大きなプールに探して、彼らが期待して被写体に関連した定数を確認することができ、あなたのアプリケーションに貢献したいときに。

.e.g電子メールの種類に関するフラグを一度検索すると、それはEmailType::の範囲内にあると見られ、同じクラスに追加すると確信しています。

+1

これは私のアイデアより明らかに優れています。 しかし、定数に関連するいくつかの追加的なロジックをどのクラスで行うべきですか?例えば、私は10個のステータスがあり、そのうちのいくつかは、電子メールが、ステータスで「承認済み」であるならば、それは他に変更できないことに、意味を「仕上げ」され、そのうちのいくつかは、「のInProgress」を意味し、その状態ですさらに時間がかかります。 だから私はfucntcion isStatusFinal($状態)が必要です。 提案したように、ステータスクラスに実装する必要がありますか? –

+3

私は冗長なプレフィックスを取り除くことさえ提案します。 'Statuses :: NEW'はうまくいくでしょう。 – deceze

関連する問題