下面是一個傳統的PHP應用程序,有人可以解釋這裏發生了什麼,或者是什麼一般術語是在這條線後面,所以我可以研究它。主要是我很困惑關於? $foo : !$foo
這裏使用的preg_match概念是什麼?
preg_match("/^test_item_([0-9]*)/", $foo, $item) ? $foo : !$foo
下面是一個傳統的PHP應用程序,有人可以解釋這裏發生了什麼,或者是什麼一般術語是在這條線後面,所以我可以研究它。主要是我很困惑關於? $foo : !$foo
這裏使用的preg_match概念是什麼?
preg_match("/^test_item_([0-9]*)/", $foo, $item) ? $foo : !$foo
如果$foo
它返回的是模式匹配。否則它會被否定,因爲!
。
這意味着一些不同的事情,具體取決於$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
這是很可怕的行爲,你應該做的意圖更加清晰。
優秀,清晰和樂於助人,非常感謝。也知道它不是最好的(最清晰的)代碼是最有洞察力的。 – mayersdesign
的?
先於真正條件的輸出,該:
先於假條件的輸出。
當嘗試處理&顯示布爾值時,很多人都會混淆不清。下面是一個使用demo和echo
向var_export()
顯示速記條件的輸出:
$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()
講述了一個非常準確的輸出結果。
如果'$ foo'字符串匹配模式 - 返回此字符串。否則返回'!$ foo' –
它與'if'和'else'相同以返回結果 –
關鍵字:三元 –