三元假似乎没有相关性。它在这个例子中是如何工作的?
PHP初学者在这里,我有一个小程序,要求一个基数并返回一个立方结果。我最初使用if / else编写它但会得到“未命名的索引”错误,但是使用isset()解决了这个问题。下一个问题是传递给pow()的变量的“非数字值”。我得到输入以使用下面的三元组,它现在可以工作了。
<?php
$base = (int) (isset($_POST['base']) ? $_POST['base'] : 0);
if ($base) {
echo number_format(pow($base, 3));
}
else {
echo 'Please enter a number';
}
?>
为了跟进,我发现在if语句中使用@Mark Locklear建议的(is_numeric(($_POST['base'])))
就是我最初想要的。沿着三元路走下去让我误入歧途,但绝对是一次学习经历。因此How to write a PHP ternary operator不会完全解决我原来的问题。谢谢
第一
(isset($_POST['base']) ? $_POST['base'] : 0)
如果密钥$_POST['base']
存在,则评估为base
,否则为0
然后...
$base = (int) (isset($_POST['base']) ? $_POST['base'] : 0);
...把结果投到int
。
如果用户输入非数字字符串(例如ABC
)或传递空字符串,则$base
设置为0
最后
if ($base) {
将$base
强制转换为布尔值。任何与0
不同的数字都被评估为true
。 0
被评估为false
并导致执行else
区块。
任何输入数字和0
不同的将是立方体。
没有输入,非数字字符串或值0
将导致Please enter a number
PHP是松散的类型。这基本上意味着任何变量都可以随时改变其类型。你可能有$base = 'zero';
这意味着它是一个字符串,然后在下一行有$base = 0;
,PHP将无关紧要。
从某种意义上说,你是正确的,0等于false,并且PHP将其解析为false,但严格来说,0
是一个整数。如果你想将条件标记为布尔值false,为了使代码清晰,你应该使用false
而不是0
。
当处理If
条件时,false
,0
,null
和''
将全部解决为false
。