2017-07-16 11 views
2

以下は従来のPHPアプリケーションです。誰かがここで何が起きているのか、一般的な用語が何の裏にあるのか説明して、私が研究することができますか? $fooがあるとして、それが返されたパターンと一致した場合、ほとんど私が? $foo : !$fooここで使用するpreg_matchの概念は何ですか?

preg_match("/^test_item_([0-9]*)/", $foo, $item) ? $foo : !$foo 
+1

'$ foo'文字列がpatternと一致する場合 - この文字列を返します。それ以外の場合は '!$ foo'を返す –

+1

結果を返すために' if'と 'else'と同じものが返されます –

+2

キーワード:ternary –

答えて

3

に関する混乱しています。それ以外の場合は、!のために無効になります。

これは、$fooの実際の内容に応じて、いくつかの異なることを意味します。

これらが可能です。

$fooは例えば、 "falsy" です。 null,false,''trueを返します。それ以外の場合は、falseを返します。

例:

$foo = 'test_item_1'; // leads to 'test_item_1' 
$foo = 'test_item'; // leads to false 
$foo = '';   // leads to true 

これは非常に恐ろしい行動である、あなたは意図がより明確にする必要があります。

+0

優れた、どうもありがとう。また、それが最善のコードではないことがわかっていると、最も洞察が深まります。 – mayersdesign

1

?状態の出力の前に、:条件の出力に先行します。

&のブール値を表示しようとすると、多くの人が混乱してしまいます。ここでは速記条件付きの出力を表示するためにechovar_export()を使用してdemoです:

$foo='test_item_1'; 
var_export(preg_match("/^test_item_([0-9]*)/", $foo, $item)?$foo:!$foo); 
echo "\n"; 
echo preg_match("/^test_item_([0-9]*)/", $foo, $item)?$foo:!$foo; 

echo "\n\n---\n\n"; 

$foo='failing string'; 
var_export(preg_match("/^test_item_([0-9]*)/", $foo, $item)?$foo:!$foo); 
echo "\n"; 
echo preg_match("/^test_item_([0-9]*)/", $foo, $item)?$foo:!$foo; 


echo "\n\n---\n\n"; 

$foo=''; 
var_export(preg_match("/^test_item_([0-9]*)/", $foo, $item)?$foo:!$foo); 
echo "\n"; 
echo preg_match("/^test_item_([0-9]*)/", $foo, $item)?$foo:!$foo; 

出力:あなたが見ることができるように

'test_item_1' 
test_item_1  // the string as expected 

--- 

false 
       // print empty string 

--- 

true 
1    // converts true to 1 

echoを使用する可能性が混乱を招くだろう。 var_export()は非常に正確な出力を示します。

関連する問題