我正在研究表达式解析器,我想添加条件运算符 ( ?:) 我已更改&&并||像 javascript 中的一次一样,使用以下代码:
?:
&&
||
case '&&': $stack->push($op1 && $op2 ? $op2 : ($op1 ? $op2 : $op1)); break; case '||': $stack->push($op1 ? $op1 : $op2); break;
所以我认为我只是替换foo ? bar : baz为foo && bar || baz是否可以使用正则表达式?如果运算符可以嵌套,则条件运算符的每个参数都可以具有相同的运算符。
foo ? bar : baz
foo && bar || baz
foo && bar || baz并且foo ? bar : baz不等价。
假设两者都是foo被认为是真的值并且bar是被认为是假的值。在这种情况下,foo && bar为假,所以第一个表达式的值为baz。?:另一方面,三元运算符 ( ) 总是在第一个参数为真时返回第二个参数,所以它会返回bar。
foo
bar
foo && bar
baz
尝试1 && 0 || 2和1 ? 0 : 2。第一个是 2,第二个是 0。
1 && 0 || 2
1 ? 0 : 2
评估三元运算符的最简单方法是作为单个运算符采用三个操作数
顺便说一句,op1 && op2可以更简单地写为op1 ? op2 : op1.
op1 && op2
op1 ? op2 : op1