PHPに関する質問です。

OS:Vine4.3
PHP:4.4.x

設定値など定数に配列を格納したいのですが、定数に配列は格納できません。
そこで、例えば$GLOBALSに配列を格納して上書きできない、または、上書きさせないといったことは可能でしょうか?
宜しくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2007/05/07 00:20:20
  • 終了:2007/05/11 22:21:48

回答(1件)

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012007/05/07 01:01:30

ポイント60pt

>$GLOBALSに配列を格納して上書きできない、または、上書きさせない

残念ながら無いと思いますよ。

自分(あるいは自分達)でプログラムを組む訳なので $GLOBALS['ほにゃほにゃ'] には書き込みしないという自分ルールを作ればそれで良いだけの事だと思います。

自分ルールを作って守るのだとしてもコーディングミスなどで書き換えてしまわないかという心配がある。ということであればグローバル変数ではなく『配列の添え字となる値を、引数とするような共有関数を造る』という手もあるでしょう。

定数として種類が少ない場合はcons1,cons2,・・・,cons20などと定義しておいてconstant("cons" . $x)などという使い方もあるでしょう。

他にも方法はあるかと思いますが、別の方面から考えるという助けになればと思い書き込みました。

id:masashi0316

やっぱりないのかなぁ。

複数人数で開発するときの危険回避と考えていて、constantはありだとおもいますが、確かに値が少ない場合に限りですねぇ。

投稿後色々考えて、

define("HOGE",'$HOGE=array('a'=>'1','b'=>'2',c=>'3');');

として使用直前でevalするのがいいのかなぁと考え始めました。

ご回答ありがとうございました。

2007/05/07 01:12:05
  • id:masashi0316
    あ、クォーテーションまちがってますね
  • id:GEN111
    define('CONSTANT_VALUES','
    吾輩は=猫である
    親譲りの=無鉄砲で
    メロスは=激怒した
    山椒魚は=悲しんだ
    国境の=長いトンネルを
    ') ;

    $k = 'メロスは' ;
    echo preg_replace("/(.+\n)*?$k=(.+)\n?(.+\n)*/", '$2', CONSTANT_VALUES) ;

    $keys = split("\n", preg_replace('/=.+/', '', trim(CONSTANT_VALUES))) ;
    $k = $keys[3] ;
    echo preg_replace("/(.+\n)*?$k=(.+)\n?(.+\n)*/", '$2', CONSTANT_VALUES) ;

    定数を無理矢理配列チックに扱う。
    いつも preg するのは遅いだろうし存在しないキーを指定したときは変になるしであまり使えないでしょうが。
    あとは iniファイルと parse_ini_file 使うくらいですかね。
  • id:masashi0316
    やっぱり、直前でなんらかの処理が必要なんですね。
    parse_ini_file といった組み込み関数は利用したことがなかったので勉強になりました。ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません