了解三元虚假

问题描述 投票:0回答:2

三元假似乎没有相关性。它在这个例子中是如何工作的?

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语句。

为了跟进,我发现在if语句中使用@Mark Locklear建议的(is_numeric(($_POST['base'])))就是我最初想要的。沿着三元路走下去让我误入歧途,但绝对是一次学习经历。因此How to write a PHP ternary operator不会完全解决我原来的问题。谢谢

php ternary-operator
2个回答
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


0
投票

PHP是松散的类型。这基本上意味着任何变量都可以随时改变其类型。你可能有$base = 'zero';这意味着它是一个字符串,然后在下一行有$base = 0;,PHP将无关紧要。

从某种意义上说,你是正确的,0等于false,并且PHP将其解析为false,但严格来说,0是一个整数。如果你想将条件标记为布尔值false,为了使代码清晰,你应该使用false而不是0

当处理If条件时,false0null''将全部解决为false

© www.soinside.com 2019 - 2024. All rights reserved.