php - PHP中数组上的未定义索引是否有“自动空”运算符?
问题描述
我一直发现我正在编写很多这样的代码:
$customData1 = $user['custom_data_1'] ?? null;
$customData2 = $user['custom_data_2'] ?? null;
$customData3 = $user['custom_data_3'] ?? null;
似乎应该有某种更简单的语法。
我希望它能够正常工作:
$customData1 = $user['custom_data_1'];
如果索引没有定义,那就是这样$customData1
。null
但这会出现 PHP 错误。有没有类似的东西:
$customData1 = $user['custom_data_1']?;
我理解??
当回退不那么不寻常但null
很常见时使用,我不明白为什么这个运算符没有默认值。
我知道我也可以这样做:
$user = (object) $user;
$customData1 = $user->custom_data_1;
$customData2 = $user->custom_data_2;
$customData3 = $user->custom_data_3;
但这超出了我实际上试图寻找答案的范围。
解决方案
如果您仍然愿意考虑涉及对象,而不是您提到的对象,您可以实现预定义的接口ArrayAccess
。就像是:
class stdArray implements ArrayAccess
{
private $container = [];
public function __const(array $array = [])
{
$this->container = $array;
}
...
public function offsetGet($offset)
{
return $this->container[$offset] ?? null;
}
...
// So we don't have to instantiate a new Object for each array if we don't need to.
// Just me mindful though :P
public function replace(array $array)
{
return $this->container = $array;
}
}
例如:
$arr = new stdArray($user);
$customData1 = $user['custom_data_1'];
$customData2 = $user['custom_data_2'];
$customData3 = $user['custom_data_3'];
$arr = new stdArray();
foreach ($multiArray as $subArray) {
$arr->replace($subArray);
$customData1 = $arr['custom_data_1'];
$customData2 = $arr['custom_data_2'];
$customData3 = $arr['custom_data_3'];
// Do some operations ...
}
还没有实际测试过,但这可能/应该有效。
推荐阅读
- amazon-web-services - 放大配置
- javascript - 如何从第二个下拉值中从数据库中获取数据
- javascript - KendoUI - 选择时禁用某些节点
- binding - 如何在 SwiftUI(或替代方法)的主体方法中初始化派生变量
- sql - 如何创建一个将记录从一个表插入到另一个表并检查有效性的过程?PL/SQL
- tensorflow - gRPC+MPI 是否需要 RDMA?
- python - 如何解决问题 TypeError: cannot serialize '_io.BufferedWriter' object?
- swift - 在 calloutAccessoryControlTapped 时更改传递给“MapView:UIViewRepresentable”的 BindableObject 的值
- java - ReentrantReadWriteLock 在 ConcurrentHashMap::compute() 中使用时挂起
- scala - 如何根据字符串动态构造带参数的子类