我的视图类中的参数警告无效,为什么?
问题描述:
我得到这个:我的视图类中的参数警告无效,为什么?
Warning: Invalid argument supplied for foreach() in \classes\classes.php on line 21
我所有的HTML进去$content[]
然后我一直使用setContent第一解析它。什么导致这个warrning,var_dumping $内容说它的一个数组,为什么这个参数是无效的?我应该忽略这个警告吗?
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-> content不是数组。您将其设置为代码中其他位置的非数组值。您提供的代码示例没有错误,但是我建议把这个在你的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捕获错误。
其中任何一种都可以解决您的问题,并且您使用的是个人偏好问题。通常我更喜欢异常,但我可以肯定地看到类型暗示在这里可能更有意义,因为您很可能不想从错误中恢复。
答
如果强行制定者接受一个数组,你可以跟踪其调用方法传递无效数据:
public function setContent(array $content) {
这假定$content
应该是一个数组 - 如果你想通过非数组项为增加了到一个数组,然后该方法可能会被错误命名,应该被称为addItemToArray()
(以及在内部做一些不同的事情)。
这是因为你的'$ this-> content'不是什么东西,可用于迭代。在循环之前用'var_dump($ this-> content)'检查这个' –
你有一个函数中的内容设置,但是你没有调用函数来实际设置它。你应该在你的构造中调用setContent函数。 – Karl
@Ahmad,私人可在课堂内使用。变量是否是一个数组? –