【发布时间】:2013-09-16 00:23:45
【问题描述】:
我有一个类包含一组类。循环遍历数组并尝试运行 Class 函数时,出现错误:
Fatal error: Call to a member function getTDs() on a non-object on line 21
这是我的代码:
Cars.class
class Cars {
private $cars = array();
public function __construct(){
$result = DB::getData("SELECT * FROM `cars` ORDER BY `name`");
foreach($result as $row){
$this->cars[] = new Car($row);
}
}
public function printTable(){
$html = '<table>';
for($i=0, $l=count($this->cars); $i<$l; $i++){
$html .= '<tr>';
$html .= $this->cars[$i]->getTDs();
$html .= '<td></td>';
$i++;
//print_r($this->cars[$i]);
//print_r($this->cars[$i]->getTDS());
$html .= $this->cars[$i]->getTDs(); //This is the supposed non-object
$html .= '<td></td>';
$i++;
$html .= $this->cars[$i]->getTDs();
$html .= '</tr>';
}
$html .= '</table>';
echo($html);
}
}
汽车类
class Car {
public $data;
public function __construct($data){
$this->data = $data;
}
public function getTDs(){
$html = '<td>'.$this->data['name'].'</td>';
return $html;
}
}
当在那个“非对象”(第 19 行)上使用 print_r 时,我得到了这个:
Car Object
(
[data] => Array
(
[name] => 'Ferrari'
)
)
当在“非对象”调用 getTDs()(第 20 行)上使用 print_r 时,我明白了:
<td>Ferrari</td>
那么,当我尝试将该结果添加到我的 $html 变量时,为什么在下一行它会中断?
【问题讨论】:
-
当 PHP 告诉你某物不是对象时,它真的不是对象。
-
var_dump($this->cars)看看里面是否有超过 1 个对象。 -
这更像是一个问题而不是一个答案,但你可以在你正在实例化的同一个类中创建一个类的新实例。意思是你的
New Car行?你就不能$this吗? -
@u_mulder
var_dump($this->cars)显示 115 辆汽车。我的数据库中有多少个。
标签: php class oop object foreach