三元假似乎没有相关性。在此示例中如何运作?
这里的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';
}
?>
为了跟进,我发现只是按照@Mark Locklear的建议使用(is_numeric(($_POST['base'])))
在if语句中,这正是我最初想要的。走三元论会误入歧途,但这绝对是一次学习。因此How to write a PHP ternary operator将无法完全解决我原来的问题。
谢谢
答案 0 :(得分:1)
第一
(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
答案 1 :(得分:0)
PHP是松散类型的。这基本上意味着任何变量都可以随时更改其类型。您可以使用$base = 'zero';
来暗示它是一个字符串,然后在下一行使用$base = 0;
,而PHP将不在乎。
从某种意义上来说,您是正确的,即0与等效等于false,PHP会将其解析为false,但严格来说0
是一个整数。如果要将条件标记为布尔值false,为了使代码清晰,应仅使用false
而不是0
。
在处理If
条条件时,false
,0
,null
和''
都将解析为false
。