php-iset在php5.3上的工作方式不同


php isset working differently on php 5.3

我简化了这段代码,但发现它的工作方式与旧版本的php不同。

$data = '1';
if(isset($data['yes'])){
    die('yes');
} else {
    die('no');
}

使用windows php 5.4版和linux 5.3 进行测试

如果我更改$data = 1;,那么两者的工作方式相同。查看手动字符串偏移已经更改,所以这可能已经解决了问题。

所以问题是如何最好地构建在旧版本上工作的代码?

从更快的性能角度来看:

if(is_array($data) && isset($data['yes'])){
if(array_key_exists('yes', $data)){

这是的最佳方式

if (is_array($data) && isset($data['yes']))
{
}

如果在不检查$data是否为数组的情况下执行array_key_exists,则会出现错误,因为array_key_exists函数的第二个参数必须始终为array 类型

http://php.net/manual/en/function.array-key-exists.php

第二个参数或array_key_exists必须是一个数组,所以第一个选项是最好的。

if(is_array($data) && isset($data['yes'])){}