PHP强制数组键以返回类型存在
我正在使用一个遗留应用程序,其中方法返回一些大型关联数组 在添加功能时,很难阅读/理解,因为在开发过程中,很难毫不费力地确定给定类中的每个方法是否返回了正确的数组键 我知道,通过对接口编程,您正在强制执行一个契约——这很好,但并不能解决强制执行返回类型的问题 此外,如果返回类型是关联数组,我需要一种在返回的数组不包含正确的数组键时以编程方式引发异常的方法PHP强制数组键以返回类型存在,php,arrays,oop,Php,Arrays,Oop,我正在使用一个遗留应用程序,其中方法返回一些大型关联数组 在添加功能时,很难阅读/理解,因为在开发过程中,很难毫不费力地确定给定类中的每个方法是否返回了正确的数组键 我知道,通过对接口编程,您正在强制执行一个契约——这很好,但并不能解决强制执行返回类型的问题 此外,如果返回类型是关联数组,我需要一种在返回的数组不包含正确的数组键时以编程方式引发异常的方法 除了创建一个验证类作为中间层之外,还有一种合理的方法来强制执行关联数组中返回的内容吗?假设您有一个使用键foo和bar返回数组的传统方法: f
除了创建一个验证类作为中间层之外,还有一种合理的方法来强制执行关联数组中返回的内容吗?假设您有一个使用键
foo
和bar
返回数组的传统方法:
function some()
{
return array('foo' => 'x', 'bar' => 2);
}
您需要确保此数组还需要具有bar
和qux
键,因为旧代码不可扩展且。。。你只是需要它。处理方法的响应,如下所示:
function ensure(array $arr)
{
$keys = array('foo', 'bar', 'baz', 'qux');
return array_merge(array_fill_keys($keys, null), $arr);
}
$expected = ensure(some());
这样,$arr
中设置的所有值都将替换数组中的默认值null
s,并且您不会遇到“key not exists”错误。当然,您可以使用array\u merge()
调用standalone,用一些修饰符包装遗留方法,但解决方案是两种方式都可以
如果希望在旧方法不返回某些内容时引发异常,则可以类似地利用数组\u diff\u key()
:
如果我的答案合适,接受它怎么样?
function check(array $arr)
{
$keys = array('foo', 'bar', 'baz', 'qux');
if(array_diff_key(array_fill_keys($keys, null), $arr)
{
throw new \RuntimeException('Invalid data returned!');
}
}
$expected = ensure(some());