lumen array_key_exists()贬值,那么如何使用isset()或property_existss()等



我已经尝试过array_key_exists()。但当它应该返回预期结果时,lumen显示错误消息,我需要使用另一个php函数,而不是像本题中提到的isset()property_exists()那样使用array_key_exists()

$jsonData = "mydata.json";
$content = file_get_contents($jsonData);
$unsortedData = json_decode($content, true);
//convert array to object
$object = (object) $unsortedData;
$key = $request->input('key');
$keyData = "false";
if(array_key_exists($key, $object))
{
$keyData = "true";
}
// usort($unsortedData,  function($a, $b){
//     return $a['no'] > $b['no'];
// });
return $keyData;
// var_dump($unsortedData);

那么,应该使用哪一个以及如何使用呢?谢谢你的帮助

array_key_exists()可以处理对象,但该行为在php 7.4.0中被弃用,并在php 8:中被删除

注意:

出于向后兼容性的原因,array_key_exists()也将如果键是在给定为的对象中定义的属性,则返回true大堆自PHP 7.4.0起,此行为已被弃用,自PHP 8.0.0。

为了检查对象中是否存在属性,property_exists()应该使用。

因此,您可以将代码更改为:

// Take note that the order of parameters is inverted from the array_key_exists() function
//                    |       |
//                    V       V
if(property_exists($object, $key))
{
$keyData = "true";
}

虽然上面的答案在某些情况下解决了问题,但当您拥有受保护的/私有的属性时,它就不能解决问题。

我使用array_key_exists来检查该属性是否为private/protected,其中最后一个属性将由函数标记为星号并返回false,因为名称不匹配。

我这样解决了这个问题:

array_key_exists($key, (array)$obj);

因此,即使在php8中,类型转换对象也应该解决它。我认为在php7和更早的版本中,这是在后台完成的。在8他们删除了它,也许性能问题??

很多人推荐property_exists($object,$key),但它是针对对象或类属性的,而不是针对数组的。如果您检查数组,它将返回一个错误。

第一个参数必须是对象或现有类的名称

相关内容

  • 没有找到相关文章

最新更新