我正在尝试使用自创建的对象渲染表的一部分。 当我尝试访问类中的方法时,我得到:
捕获致命错误:类dayDaytimeFields的对象不可能 在第85行的/Applications/MAMP/[...]/test.php中转换为字符串
第85行是:
$testObj->renderFields();
这是我的代码:
<table class="table table-striped table-bordered table-hover">
<caption>Week Planner</caption>
<thead>
<tr>
<th></th>
<th>Breakfast</th>
<th>Lunch</th>
<th>Dinner</th>
</tr>
</thead>
<tbody>
<?php
class dayDaytimeFields {
public $dayDaytime;
public $week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
public $weekShort = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];
public $dayTime = ['Breakfast', 'Lunch', 'Dinner'];
public $dayTimeShort = ['BrF', 'Lun', 'Din'];
public function renderFields() {
for ($i = 0; $i < count($this->$week); $i++) {
echo "<tr><th>" . $this->$week[$i] . "</th>";
for ($j = 0; $j < count($this->$dayTime); $j++) {
$this->dayDaytime = $this->$weekShort[$i] . $this->$dayTimeShort[$j];
echo "<td><input type='text' name='" . $this->dayDaytime . "' id='" . $this->dayDaytime . "'></td>";
}
echo "</tr>";
}
}
}
?>
<?=
$testObj = new dayDaytimeFields();
$testObj->renderFields();
?>
</tbody>
</table>
这是我进入OOP的第一步,所以任何进一步的输入(即如何改进代码)都受到高度赞赏:-)
答案 0 :(得分:3)
你有问题:
<?=
$testObj = new dayDaytimeFields();
$testObj->renderFields();
?>
首先,<?=
标记是:
<?php echo
所以你基本上是这样做的:
<?php echo $testObj = new dayDaytimeFields(); ?>
这引发了你可捕获的致命错误;您的班级dayDaytimeFields
显然没有__toString()
方法,因此您无法自动echo
。
实际上,更准确地说你的代码被解释为:
<?php echo $testObj = new dayDaytimeFields(); $testObject->renderFields(); ?>
如果您实施了__toString()
方法,则会调用它并打印其返回值。
但是,第二个语句$testObject->renderFields()
将被调用,但其值不会被回显。
请执行此操作,假设您要echo
$testObj->renderFields()
的返回值:
<?php
$testObj = new dayDaytimeFields();
echo $testObj->renderFields();
// etc.
希望这会有所帮助:)