phpに関する質問です。

ひとつの定数または変数に複数の値を入れる(配列とは異なります)にはどうしたらよいでしょうか?
以下のソースがあります。
//test1.php
define("_MODE_A", "1");

//test2.php
include "test1.php";
$IfTypeA = ($id == _MODE_A") ? TRUE : FALSE;
$IfTypeB = !$IfTypeA;

この場合、IfTypeAをTRUEにするには_MODE_Aの値が1である必要がありますが、2と3の場合もIfTypeAをTRUEにしたいです。
修正するファイルはtest1.phpだけにしたいためdefine("_MODE_A", "1");を修正するか付け加える必要があります。
この場合test2.phpには一切手を加えず、test1.phpだけを修正することだけで_MODE_Aに1、2、3の複数の値を持たせることは可能でしょうか?
定数が不可な場合、_MODE_Aを変数に変えても構いません。
ご教示頂けると幸いです。宜しくお願い致します。

PHP 5.1.6

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2011/01/24 10:35:36
  • 終了:2011/01/27 05:04:43

ベストアンサー

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492011/01/24 11:21:16

ポイント60pt

defineを用いて無理からに行うとすれば下記のような具合になりますが煩雑すぎて使い勝手が悪すぎます

//test1.php
define("_MODE_A", "1,2,3");
 
//test2.php
include "test1.php";
$IfTypeA = ( array_search( $id, split( ',', constant("_MODE_A") ) ) !== FALSE ) ? TRUE : FALSE;

 

定数は不変で普遍的な1つの値なので、今回のような場合は定数ではなく関数を用いましょう

//test1.php
function modoCheck( $mode, $id ) {
    $modeList = array( "_MODE_A"=>array( "1", "2", "3" ), "_MODE_B"=>array( "4", "5", "6" ) );
    return( ( array_search( $id, $modeList[$mode] ) !== FALSE ) ? TRUE : FALSE );
}

//test2.php
include "test1.php";
$IfTypeA = modoCheck( "_MODE_A", $id );

 

もっと使いやすくするためにclass定義というものがあるのですが、まずは上記で検討してみてください

学ぶ時間ができたならばclassについても学んで実装してみてください

id:xptree

回答ありがとうございます。とても参考になりました。

無事1.2.3を_MODE_Aにすることができました。

しかし最後の$IfTypeB = !$IfTypeA;が無効となってしまいました。

IfTypeAとIfTypeBでは表示される画面が異なっていたため、IfTypeBの場合画面が真っ白になってしまいます。

IfTypeBは123以外の全てのパラメータです。

ご教示頂けると幸いに存じます。

2011/01/24 12:02:17
  • id:windofjuly
    うぃんど 2011/01/24 12:29:47
    >最後の$IfTypeB = !$IfTypeA;が無効
    こちらでは特に問題はでていませんので、見直してくださいとしか言えないです
     
    想像だけですが、問題点は、下記それぞれの比較演算子の機能の違いを把握することにありそうな気がします
    == と === は違います
    != と !== も違います
    特にFALSEを値として取り扱う際には緩やかな比較(==や!=)と厳密な比較(===や!==)で大きな違いが出ますので注意が必要です
    緩やかな比較を行った場合と厳密な比較を行った場合の結果表が下記にありますので参照してみてください
    http://php.net/manual/ja/types.comparisons.php
     
    これから外にでますので、以後の返信は夜遅くになるかもしれませんが、今回手を加えた部分と、処理を$IfTypeAや$IfTypeBによって処理を分けている部分を抜き出したものを書いておいてもらえれば具体的な箇所を示せるかもしれませんので、よければどうぞ
  • id:sayo212sayo
    コメント荒らし キタ━━(━(━(-( ( (゚∀゚) ) )-)━)━) ━━ !!!!!
     
    質問者による「test2.phpには一切手を加えず、test1.phpだけを修正することだけで」を完全無視!
    いや、あんたは凄いよ!!
  • id:xptree
    windofjulyさん
    ご丁寧にコメントありがとうございます。
    こちらの勘違いだったみたいで無事正常に表示されました。
    とても助かりました。
    また機会がありましたら宜しくお願い致します。

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

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

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

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