php 返回值不确定的问题.

Tuesday 发布于 2013/08/14 11:59
阅读 283
收藏 0
PHP
<?php
    error_reporting(0);
    echo 'phpversion: '.phpversion();
    echo '<br />';
    $arr = '';
    var_dump(in_array('a', $arr));
?>

php似乎很坑人.

bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )

这是手册中的描述, 说返回bool值. 可我测试这种情况返回null

phpversion: 5.5.1
NULL

这属于php的bug了吧.

以下是问题补充:

@Tuesday:演示: http://www.os688.com/test.php (2013/08/14 12:01)
加载中
0
leo108
leo108
phpversion: 5.2.17

bool(false)

phpversion: 5.3.26
Warning: in_array() expects parameter 2 to be array, string given in /www/web/public_html/1.php on line 1 NULL

Tuesday
Tuesday
假如关闭了错误显示, 那返回值就成null了. 这是怎么回事?
0
Narky
Narky

Warning: in_array() expects parameter 2 to be array, string given in test.php line 3

如果换成 $arr = array();

则正确dump 出 boolean false

Tuesday
Tuesday
关闭错误显示再测. 很多网站是关闭错误输出的.
0
solu
solu
我估计是 $arr  = ''; 被强制转换成array失败然后直接return了
0
Narky
Narky

@Tuesday

输出

phpversion: 5.3.13

boolean false

Tuesday
Tuesday
回复 @Narky : 一直很健壮呀, 我测试的时候都是很正常的. 第二个变量我都传的数组, 可今天发生了一个变化, 第二个参数有可能为字符.
Narky
Narky
回复 @Tuesday : 自己保证自己代码的健壮性还是很有必要的啊
Tuesday
Tuesday
回复 @Narky : 那也不能返回null吧, 假如我没监控错误, 不就坏大事了?
Narky
Narky
回复 @Tuesday : 只是内部的类型检查,php是弱类型,所以在不关闭错误提示的情况下,这个报的是一个warning,并不是错误。warning并不会导致程序中断啊
solu
solu
回复 @Tuesday : 给的只是warning级别的提示,不会中断程序运行
下一页
0
inuxor
inuxor

参数给出的是个错误的类型,还指望能得到个正确的结果?如果真这样,才是php的bug。

<?php
    error_reporting(0);
    echo 'phpversion: '.phpversion();
    echo '<br />';
    $arr = 'sssa';
    $re = in_array('a', $arr);
    var_dump($re);
参数类型错误的情况下,是 没有返回值的,因为执行失败了。也就是说看到的null根本不是in_array的返回值,而是那个 没有
var_dump要求了一个未定义的变量,它是个undefined,可不就是个null


Tuesday
Tuesday
好像有道理.
0
酒逍遥
酒逍遥

不是 bug ..因为传给 函数的参数 类型是错的.. 函数 压根没执行..也就没有返回值了.


Tuesday
Tuesday
回复 @酒逍遥 : 你能帮忙提交不? 我英文不太好.
酒逍遥
酒逍遥
回复 @Tuesday : 嗯 ,也可以在php官网提交bug report.等待他们修复. 也可以自己改下php的源码,然后重新编译下,应该能满足你的需求了.
Tuesday
Tuesday
回复 @酒逍遥 : 我觉得还是php 的bug, 明明它可以处理好的.
酒逍遥
酒逍遥
回复 @Tuesday : 呃 一般来说这种问题应该是在测试环境里解决..如果上了生产环境...就没办法了
Tuesday
Tuesday
回复 @酒逍遥 : 业务流程不许可后面检查, 只要判断一通过, 数据就全部同步到其它服务器, 美国, 英国. 后面发现问题也拯救不回来呀.. 能事前处理不!!
下一页
0
Tuesday
Tuesday
<?php
    error_reporting(0);
    echo 'phpversion: '.phpversion();
    echo '<br />';
    $arr = '';
    
    // bool in_array  ( mixed  $needle  , array $haystack  [, bool $strict  = FALSE    ] )
    var_dump(in_array('a', $arr));
    
    echo '<br />go run';
exit();

如果说in_array崩溃了, 那为什么php还在继续往下执行?
返回顶部
顶部