好吧,既然您在帖子中使用了“漂亮”这个词,那么为了可读性,只需对外观更改提出一个快速建议:
function is_array_or_alike($var) {
return is_array($var) ||
($var instanceof ArrayAccess &&
$var instanceof Traversable &&
$var instanceof Serializable &&
$var instanceof Countable);
}
更改说明:
函数名称更改:“” -> “”只是为了清楚地表明正在测试数组性和相似性。is_array_alike
is_array_or_alike
Param/arg 名称更改:-> 因为 “” 已经假定参数是数组类型。$array
$var
$array
堆叠 &'ed 条件,以提高可读性和符合 Drupal 编码标准:最大 80 个字符行。由于你是Drupal核心维护者之一,我想我假设这个功能可能会进入Drupal,所以你可能在提交之前会这样做。
你是对的,这是不必要的。在Java中,这是必要的,因为如果第一个操作数不是对象,则会引发编译时错误,但是我刚刚在PHP中检查了一下,没有错误,只是bool(false)的结果。is_object()
instanceof
我同意paulmatthews86的建议,即你提供一个用例。如果我们不知道标准,就很难提供建议。例如,从鸭子类型范式的角度来看,测试将是有用的,但不一定是强制性的,甚至不完整。如果您对 它可以做什么以及它在某些上下文中的行为方式更感兴趣,那么您可以使用反射来检查以后需要在其上调用的方法是否存在,或者您可以测试它在传递给数组函数时的行为是否符合预期。例如,它是否与 、 等“一起工作”。如果这些行为对你的用例更重要,那么这些测试可能会取代类型测试,尽管当然会有很多重叠。instanceof
$var
array_udiff_assoc
array_chunk
instanceof
希望这有帮助。有兴趣看看你最终决定什么,如果你决定发布它。