使函数返回0和true

时间:2010-06-30 23:07:11

标签: php boolean

这可能吗?我看到一些原生的php函数可以做到这一点。例如:strpos()可以返回0,显然可以为真。

7 个答案:

答案 0 :(得分:8)

修改

当手册说某些函数可以返回整数0和布尔值false时,这意味着它可以返回 整数0或布尔false(不是两者)打电话。 PHP不是严格类型的,函数可以在不同的情况下返回不同的类型。例如,以下函数返回0false,具体取决于传递的参数是否为非负数:

function myfunc($arg) {
    if ($arg >= 0)
        return 0;
    else
        return false;
}

原始

PHP没有多次返回。您有两种选择:

返回复合值

function myfunc() {
    return array(0, true); //return array
}

class MyOutputHolder {
    private $number;
    private $truth;
    function getNumber { return $this->number; }
    function getTruth { return $this->truth; }
    function __construct($number, $truth) {
        $this->number = $number;
        $this->truth = $truth;
    }
}
function myfunc() {
    return new MyOutputHolder(0, true); //return object
}

第三种可能性是自定义资源,但必须在内部实现(在扩展中)。

使用输出参数

function myfunc(&$outnumber, &$outtruth) {
    $outnumber = 0;
    $outtruth = true;
}

当然,您只能返回0true,并且只能使用一个参数。

答案 1 :(得分:4)

对于可以使用返回值零成功返回的函数,您应该使用类型等价检查。

if(somefunction() !== false) {



}

如果不考虑类型,则整数零被解释为false。例如,假设某个函数返回零。

somefunction() != false

将是假的,而

somefunction() !== false

将是真的。

答案 2 :(得分:3)

您的困惑是strpos返回搜索字符串的基于零的索引

所以在这种情况下,0是有效的返回,它意味着“在索引0处找到它”

如果根本找不到该字符串,则返回FALSE。

重要的是要注意在strpos文档页面中用大红色警告写的内容:

  

此函数可能返回布尔值   FALSE,但也可能返回   非布尔值,其值为   FALSE,例如0或“”。请阅读   关于布尔人的部分了解更多   信息。使用===运算符   测试这个的返回值   功能

ie:0在php中不完全为FALSE。这是php的基础。 0 == FALSE但是0!== FALSE

同样为什么PHP可以返回数值或布尔值 - 也许这是你的实际问题 - PHP没有强类型,你从不指定你将返回的内容,所以你可以自由地返回不同的数据类型取决于功能的结果

答案 3 :(得分:2)

这算了吗?

function stupid() { 
   return "0\0"; 
}; 

echo stupid() ."\n"; 

var_dump(stupid()); 

if (stupid()) echo "true\n"; 

echo stupid() + 4 . "\n";

输出:

0
string(2) "0"
true
4

*鸭*

答案 4 :(得分:0)

一个函数只能有一个返回值。但是,如果需要,可以返回具有多个值的数组。

答案 5 :(得分:0)

我认为你误解了strpos实际返回的内容......

strpos()返回一个大于或等于零的整数,或者返回false(如果在字符串中找不到针符号)。

0在任何意义上都不相同 - 但是,PHP文档确实提到的是,由于PHP的松散类型,0可以等于false,除非您使用强制类型和值比较的条件运算符。 / p>

var_dump(0 == false);  // 'true'
var_dump(0 == true);   // 'false'
var_dump(0 === false); // 'false'
var_dump(0 === true);  // 'false'
var_dump(0 !== false); // 'true'

这就是PHP手册建议你用'!== false'测试strpos()的返回值的原因,因为你要搜索的字符可能是字符串中的第一个字符,因此函数返回0。

$string = "_testing";
var_dump(strpos($string, '_'));           // 0
var_dump(strpos($string, '_') !== false); // 'true'
var_dump(strpos($string, '_') === true);  // 'false'

答案 6 :(得分:-2)

return 0 && true;