2010-06-30 103 views
0

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

+5

你在说什么“原生PHP函数”? – MiffTheFox 2010-06-30 23:08:14

+2

if($ something){return 0;} else {return true;} – anq 2010-06-30 23:08:57

+3

有时候我希望我能评价下来:P – 2010-06-30 23:10:55

回答

8

编辑

当手动说,一些功能可以返回两个整数0和布尔假,这意味着它可以返回整数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

你忘了一个:改为返回一个对象。 – 2010-06-30 23:12:10

+0

以及例如此功能: http://php.net/manual/en/function.strpos.php (strpos) 可以返回整数0和布尔值false; 我该怎么做? – Alex 2010-06-30 23:15:45

+0

@Pek你是对的;我已经添加了它。 – Artefacto 2010-06-30 23:16:51

0

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

1

这是否算法?

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 

*鸭子*

-2
return 0 && true; 
+2

'return 0 and true;'也是有效的php :) – svens 2010-06-30 23:14:29

+0

这将返回(0 && true)的结果,它不是方式将返回两个。 – 2010-06-30 23:15:25

+2

在该表达式中'0'被解释为false,所以'&& true'被忽略。 – 2010-06-30 23:17:53

4

对于可以为零返回值成功返回的功能,你应该使用类型等价检查。

if(somefunction() !== false) { 



} 

如果不考虑类型,则将整数零解释为false。例如,假设somefunction返回零。

somefunction() != false 

将是错误的,而

somefunction() !== false 

为真。

2

您的困惑是,strpos返回搜索字符串的从零开始的索引

因此,在这种情况下,0是一个有效的回报,它的意思是“发现在索引0”

如果未找到字符串的话,那么它将返回FALSE。

要注意什么的写在大红色预警对strpos文档页面是非常重要的:

这个函数可以返回布尔 假的,但也可能返回后者评估 非布尔值 FALSE,如0或“”。有关更多 的信息,请参阅 关于布尔值的部分。使用===运算符 测试此 函数的返回值。

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

也是为什么PHP可以返回一个数值或布尔值 - 也许这就是您的实际问题 - PHP不是强类型的,您从未指定要返回的内容,所以你可以自由地返回根据功能

+0

hah - 同时发布我的答案。 .. – HorusKol 2010-06-30 23:31:48

+0

哈哈,实际上我快了0.000005秒 – Ben 2010-07-01 03:56:39

0

我想你误会究竟strpos返回的结果不同的数据类型...

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

0在任何意义上都不等于真 - 但PHP文档没有提及的是,由于PHP的宽松输入,0可以等于false,除非使用强制类型和值比较的条件运算符。

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手册建议你测试从strpos()的返回值“!==假”,因为你要搜索的字符是字符串中的第一个字符,因此该函数返回0.

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