下面是一个传统的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'相同以返回结果 –
关键字:三元 –