了解三元错误

时间:2019-04-30 16:49:59

标签: php ternary-operator

三元假似乎没有相关性。在此示例中如何运作?

这里的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';
    }

    ?>

我正在寻找有关之后的错误如何工作的解释。似乎无关紧要的是什么-字符串,整数等。我首先假设通过将其设置为0,它将false传递给下面的if / else,因此回显else语句。

为了跟进,我发现只是按照@Mark Locklear的建议使用(is_numeric(($_POST['base']))) 在if语句中,这正是我最初想要的。走三元论会误入歧途,但这绝对是一次学习。因此How to write a PHP ternary operator将无法完全解决我原来的问题。 谢谢

2 个答案:

答案 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不同的任何数字都将被评估为true0被评估为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条条件时,false0null''都将解析为false