以下是一个遗留的PHP应用程序,有人可以请解释这里发生了什么,或者一般术语是什么,所以我可以研究它。对于? $foo : !$foo
preg_match("/^test_item_([0-9]*)/", $foo, $item) ? $foo : !$foo
答案 0 :(得分:3)
如果$foo
与模式匹配,则按原样返回。否则因为!
而被否定。
这意味着一些不同的东西,具体取决于$foo
的实际内容。
这些是可能的:
$foo
是“虚假的”,例如。 null
,false
,''
它返回true
。在任何其他情况下,它返回false
。
示例:
$foo = 'test_item_1'; // leads to 'test_item_1'
$foo = 'test_item'; // leads to false
$foo = ''; // leads to true
这是非常可怕的行为,你应该让意图更加清晰。
答案 1 :(得分:1)
?
位于 true 条件的输出之前,:
位于 false 条件的输出之前。
在尝试处理时,很多人都糊涂了。显示布尔值。以下是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()
讲述了输出的非常准确的故事。