2013-03-25 96 views
0

该错误运作良好,但当我返回true时,我得到一个true1为什么?确实返回1

$num = 3; 

function number($num) 
{ 
    for($i = 2; $i < $num; $i++) { 

     if($num % $i == 0) { 
      echo("false"); 

      return false; 
     } 
    } 
    echo("true"); 

    return true; 
} 

echo number($num); 
+0

您可能想要阅读[PHP布尔文档](http://php.net/manual/en/language.types.boolean.php) – Ares 2013-03-25 04:28:58

+0

另外,函数的意图是什么?据我所知,你正试图确定'$ num'是否为素数。您可以通过赋予函数和变量有意义的名称来提高代码的可读性。所以,不用'number()',你可以把它命名为'is_prime()'。 – 2013-03-25 04:45:40

+0

那么,你究竟需要什么? – sectus 2013-03-25 07:18:31

回答

1

因为在PHP TRUE是字符串格式一样1。但是,PHP处理数据类型的方式不同,这就是为什么您需要使用===运算符来验证类型和数据。

您所做的任何比较应使用===运算符。

查看实际返回结果的一种方法是在输出上使用var_dump

+0

我如何才能真实? – 2013-03-25 04:29:02

+0

你想让它显示真正的字面?如果是,那么你需要手动完成。 – judda 2013-03-25 04:29:46

+0

你需要更清楚地解释这样的答案。 'true'与_not_不一样。1是'truthy',但它不是_same_那样1.参见[fiddle](http://phpfiddle.org/main/code/av4-8ki) – 2013-03-25 04:32:41

0

当您将echo number($num);true转换为字符串时,会出现'1'。

1

呼应出真正将永远给你1.尝试

var_dump($num); 

会告诉你变量的类型和值是什么。你会在那里看到它。

0

在你的情况,你是隐式转换布尔true成整数,它的值将是1

要进行严格比较,您需要使用类型和值比较,即===运算符。

另外,var_dump()print_r()显示变量的类型。

1

当您尝试回显某个值时,它的值将被转换为字符串。所以,你试图回显布尔值。好吧,让我们来看看关于Converting to string的文档

布尔TRUE值被转换为字符串“1”。布尔FALSE被转换为“”(空字符串)。