2
switch (true){
    case stripos($_SERVER['SERVER_NAME'],"mydomain.com", 0) :

        //do something 
        break;

        /*
        stripos returns 4 ( which in turn evaluates as TRUE )  
        when the current URL is www.mydomain.com
        */


    default:

        /*
        stripos returns 0 ( which in turn evaluates as FALSE )  
        when the current URL is mydomain.com
        */


}   

striposが干し草の山で針を見つけると、0以上を返します。striposが針を見つけられない場合、FALSEを返します。このアプローチにはいくつかの利点があります。しかし、私はそれが好きではありません!

私はVBのバックグラウンドから来ています。そこで、instr関数(strposと同等)は、針が見つからない場合は0を返し、針が見つかった場合は1以上を返します。

したがって、上記のコードで問題が発生することはありません。

PHPでこの状況をどのようにエレガントに処理しますか?ここでのベストプラクティスのアプローチは何ですか?

また、別の注意点として、あなたは

switch(true) 

そもそもコードを書くのに良い方法ですか?

4

1 に答える 1

5

針が干し草の山の中に存在しない場合、strposはfalseを返します。デフォルトでは(厳密ではない比較を使用)、PHPは0とfalseを同等として扱います。厳密な比較を使用する必要があります。

var_dump (strpos ('The quick brown fox jumps over the lazy dog', 'dog') !== false); // bool (true)
var_dump (strpos ('The quick brown fox jumps over the lazy dog', 'The') !== false); // bool (true)
var_dump (strpos ('The quick brown fox jumps over the lazy dog', 'cat') !== false); // bool (false)
于 2012-04-08T20:00:17.083 に答える