我尝试执行下面的代码从数组中输出每个值,最终结果显示:
Notice: Array to string conversion in C:xampphtdocstesttutor.php on line 22
_data : Array
.PHP
<?php
class CateData
{
private $_data = array();
public function __construct($data){
$this->_data = $data;
}
}
$data = array(
'a'=>'Cate1',
'b'=>'Cate2',
'c'=>'Cate3',
'd'=>'Cate4'
);
$cate = new CateData($data);
foreach($cate as $key => $val){
echo $key." : ". $val;
}
?>
我该如何解决这个问题?
您循环访问的是类对象,而不是实际数据。
在您的班级中添加:
public function getData(){
return $this->_data;
}
然后更改:
foreach($cate as $key => $val){
echo $key." : ". $val;
}
自:
foreach($cate->getData() as $key => $val){
echo $key." : ". $val;
}
虽然接受的答案更好,但另一种方法是更改范围,这样就不需要添加 getData(( 方法。但随后可以直接访问类变量。
将变量更改为 public,并循环$cate->_data
class CateData
{
public $_data = array();
public function __construct($data){
$this->_data = $data;
}
}
$data = array(
'a'=>'Cate1',
'b'=>'Cate2',
'c'=>'Cate3',
'd'=>'Cate4'
);
$cate = new CateData($data);
foreach($cate->_data as $key => $val){
echo $key." : ". $val;
}
首先,您应该清除public
protect
和private
之间的差异。
在您的代码中,您应该将_data
更改为公共,因为您想在课堂之外访问。
然后更改:
foreach($cate as $key => $val){
echo $key." : ". $val;
}
自:
foreach($cate->_data as $key => $val){
echo $key." : ". $val;
}