这可能吗?我看到一些原生的php函数可以做到这一点。例如:strpos()
可以返回0,显然可以为真。
答案 0 :(得分:8)
当手册说某些函数可以返回整数0和布尔值false时,这意味着它可以返回 整数0
或布尔false
(不是两者)打电话。 PHP不是严格类型的,函数可以在不同的情况下返回不同的类型。例如,以下函数返回0
或false
,具体取决于传递的参数是否为非负数:
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;
}
当然,您只能返回0
或true
,并且只能使用一个参数。
答案 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;