可捕获的致命错误:类dayDaytimeFields的对象无法转换为字符串

时间:2015-12-16 10:39:16

标签: php object

我正在尝试使用自创建的对象渲染表的一部分。 当我尝试访问类中的方法时,我得到:

  

捕获致命错误:类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的第一步,所以任何进一步的输入(即如何改进代码)都受到高度赞赏:-)

1 个答案:

答案 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.

希望这会有所帮助:)