我得到这个:
警告:在第 21 行的 ''classes''classes.php 中为 foreach() 提供的参数无效
我所有的html都进入$content[]
然后我总是先使用setContent,然后渲染它。是什么导致了这种警告,var_dumping $content说它是一个数组,那么为什么这个参数是无效的呢?我应该忽略此警告吗?
class cpage {
private $title;
private $content = array();
public function __construct($title) {
$this->title = $title;
}
public function __destruct() {
}
public function setContent($content) {
$this->content = $content;
}
public function render() {
echo "<H1>{$this->title}</H1>";
21: foreach($this->content as $cont){
echo $cont;
}
}
}
您的错误消息指出$this->内容不是数组。在代码中的其他位置将其设置为非数组值。您提供的代码示例没有错误,但是我建议将其放在setContent函数中:
if(!is_array($content)) throw new InvalidArgumentException("Content must be an array");
你也可以使用类型提示来解决这个问题(感谢RainFromHeaven指出它)。
你可以像这样声明函数:
public function setContent(array $content) {
$this->content = $content;
}
这将导致php生成一个PHP可捕获的致命错误(E_RECOVERABLE_ERROR
),如果你试图传递它除了数组之外的任何内容。您可以使用set_error_handler捕获错误。
这些中的任何一个都可以解决您的问题,您使用哪一个主要是个人喜好的问题。通常我更喜欢例外,但我当然可以看到类型提示在这里可能更有意义,因为您很可能不想从错误中恢复。
如果强制 setter 接受数组,则可以跟踪哪个调用方法正在传递无效数据:
public function setContent(array $content) {
这假设$content
应该是一个数组 - 如果你想传递要添加到数组中的非数组项,那么该方法可能无论如何都命名错误,应该被称为类似addItemToArray()
的东西(以及在内部做一些不同的事情)。