2011-09-16 7 views
0

メールを送信する際のユーザー設定を保存したいと思います。これを達成するために、私は自分のシステムのメーリングクラスのクラス定数を利用し、その定数を配列のキー値として使用するつもりでした。しかし何らかの理由でキーが数値インデックスに変換され、ランタイムでのクラス定数とのマッチングはもはや機能しません。 http://pastie.org/2541980なぜ配列のデフォルトキーとしてのクラス定数はphpの数値キーに変わるのですか?

+0

あなたは、コードの他の部分は、この '$ sendEmail'属性に干渉しないことを確認していますか?あなたのコードを実行しました( 'use'や' extends'文なしで)、私はあなたのバグを再現できません。あなたのサンプルでは、​​5つの文字列キーを設定し、6つの数値キーを取得するので、単なる変換ではありません。私は干渉しているあなたのコードの別の部分があると思います。属性名を変更しようとしましたか? –

+0

私のコードは実際にははるかに長い定数で少し長くなっていますが、私はこの例をきれいに保ち、2番目のvar_dump()の6番目の数値出力を監督していました。ごめんなさい。私はペーストを更新しました – con

答えて

0

なぜあなたは、このようにそれをやっている:私は代わりに、単一の文字列を使用する場合は、そのは

これは、与えられた出力を持つクラスの例は..です期待通りに働いて?定数はフラグに似ているようです - それらを処理するより効率的な方法は、理想的にはバイナリ演算子を使用して数値にマップすることです。そうすれば、該当するすべてのフラグを「オン」にすることができます。その結果、格納が簡単になり、簡単に渡すことができます。このうち

チェック:http://life-of-brian.com/2008/04/binary-code-bitwise-operators-php/

+0

基本的に私が文字列を使用している唯一の理由は、手動でデータベースに移動するときに読みやすくすることです(これはmongodbのmctodbで、ここではmongodbです) - だからこそlazyness ..しかし、定数の値をバイナリ値にする方法は? – con

+0

非常に簡単! 1、2、4、8、16などのように、1ビット(2の累乗)に格納されている数値を取るだけです。たとえば、フラグbとcをアクティブにすると、ビット列01100が返されます。実際には保存/処理が簡単ですが、慣れていなければなりません。 – Rijk

+0

これはあなたが意味するものではないと思いますが、基本的には動作します:http://pastie.org/2541980 - あなたのリンクから、userSettingsは、バイナリから構築された1つのバイナリ変数に格納されます。それはmongodbにバイナリ値を格納することさえ可能ですか?(doctrine?) – con

関連する問題