如何检查变量是否为数组?...或类似数组的东西

2022-08-30 07:51:52

我想将循环与变量一起使用,但是例如,此变量可以是许多不同的类型。foreachNULL

所以在我测试它之前:foreach

if(is_array($var)){
  foreach($var as ...

但是我意识到它也可以是一个实现接口的类。也许我是盲人,但如何检查类是否实现接口?有没有像函数或运算符这样的东西?我发现,我可以使用它,但也许有更简单的东西?Iteratoris_ainheritsclass_implements

其次,更重要的是,我认为这个函数存在,足以检查变量或“实现接口”,或者我应该测试更多的东西吗?is_arrayIterator


答案 1

如果您在函数内部使用,并且需要数组或可遍历对象,则可以使用以下方式键入该函数的提示:foreach

function myFunction(array $a)
function myFunction(Traversable)

如果您没有在函数内部使用,或者您期望两者都使用,则可以简单地使用此构造来检查是否可以迭代变量:foreach

if (is_array($a) or ($a instanceof Traversable))

答案 2

foreach 可以处理数组和对象。您可以使用以下命令进行检查:

$can_foreach = is_array($var) || is_object($var);
if ($can_foreach) {
    foreach ($var as ...
}

你不需要像其他人在他们的答案中暗示的那样专门检查Traversable,因为所有对象 - 就像所有数组一样 - 都可以在PHP中遍历。

更技术性:

foreach适用于所有类型的可遍历对象,即数组,普通对象(遍历可访问属性)和对象(或者更确切地说是定义内部处理程序的对象)。Traversableget_iterator

()

简单地说,在普通的PHP编程中,每当一个变量是

  • 数组
  • 对象

并且不是

  • 资源
  • 标量

你可以在上面使用foreach