📌  相关文章
📜  foreach() 参数必须是数组|对象类型,给定 null (1)

📅  最后修改于: 2023-12-03 14:41:18.813000             🧑  作者: Mango

foreach() 参数必须是数组|对象类型,给定 null

在PHP中,foreach()用于遍历数组和对象。但是必须注意的是,foreach()的参数必须是数组或者对象类型,不能为null。否则,将会抛出一个Warning

$nullVariable = null;
foreach ($nullVariable as $value) {
  echo $value;
}
// Warning: Invalid argument supplied for foreach() in filepath on line number

上面的代码会抛出一个无效参数的警告,因为$nullVariablenull,而不是一个数组或者对象。

因此,在使用foreach()之前,请确保您的参数是正确的类型,否则将无法正确遍历它们的内容。

另外,当您使用foreach()遍历一个对象时,它将遍历对象的公共属性,除非您定义了一个魔术方法__iterable来指定它应该如何遍历。

class Example {
  public $a = 1;
  protected $b = 2;
  private $c = 3;

  public function __iterable()
  {
      return ['a', 'b', 'c'];  // 指定以哪个顺序迭代属性
  }
}

$example = new Example();
foreach ($example as $key => $value) {
  echo $key . ' => ' . $value . PHP_EOL;
}
// Output: a => 1

在上面的示例中,我们定义了一个Example类,并为其定义了三个属性:一个公共属性$a,一个受保护的属性$b和一个私有属性$c。然而,我们只有在将$example对象作为迭代对象传递给foreach()后,才能输出$a的值,因为它是公共的。为了遍历$b$c,我们定义了一个__iterable()方法告诉foreach()以何种顺序迭代对象的属性。

综上所述,foreach()是一个非常有用的功能,但要注意它的参数必须是数组或对象类型。