PHP对象/变量错误

时间:2011-09-06 20:39:15

标签: php

免责声明:我是面向对象PHP的新手,我对这种语言一般都很糟糕。

所以我在一个文件(class_lib.php)中有一个名为“Page”的类,我创建了这个变量并写了一个while / for循环来处理它的set:

public $extra= "";
if (isset($this->extra)) {
echo "<table id=\"tab\">";
while (list($counter) = each($this->$extra)) {
    for ($i=0;$i<3;$i++) {
    echo "<tr class=\"tl\">";
    echo "<td>$counter[$i]</td>";
    echo "</tr>";
    }
}
}

在一页上,我需要打印一张桌子。这个数据是一个数组:

$page->extra = array( array('Track no.', 'Track title', 'Track length'),
                      array('01', 'Value1', 'No1'),
                      array('02', 'Value2', 'No2'),
                      array('03', 'Value3', 'No3'),
                      array('04', 'Value4', 'No4'),
                      array('05', 'Value5', 'No5'),
                      array('06', 'Value6', 'No6'),
                      array('07', 'Value7', 'No7'),
                      array('08', 'Value8', 'No8'),
                      array('09', 'Value9', 'No9'),
                      array('10', 'Value10', 'No10'),
                      array('11', 'Value11', 'No11'),
                      array('12', 'Value12', 'No12')
                     );

我得到的错误是:

  

注意:第47行的C:\ wamp \ www \ test \ class_lib.php中的未定义变量:extra

...和

  

致命错误:无法访问第47行的C:\ wamp \ www \ test \ class_lib.php中的空属性

如果需要,这是完整的class_lib.php文件: http://pastebin.com/7XRjDKVU

...和index.php: http://pastebin.com/yHBYpNxd

我希望我在那里提供了足够的信息 - 我会感激任何帮助。

4 个答案:

答案 0 :(得分:2)

你错误地输入了变量:

while (list($counter) = each($this->$extra)) {

应该是

while (list($counter) = each($this->extra)) {

查看$ this-&gt; extra

答案 1 :(得分:1)

$this->$extra

应该是:

$this->extra

答案 2 :(得分:1)

除了其他人撰写的有关$this->extra的内容之外,您还误用了list()$counter

根据PHP docslist()用于从1个数组对象中分配多个变量。

问题在于这一行:

list($counter) = each($this->extra)

each()会从您的$this->extra数据中提取下一个key-&gt;值对,会发生什么情况。然后list()使用该对中的第一个值填充$counter,这是Key值。由于$counter现在持有Key的int值,因此它不能用作数组(并且无声地失败,回显空字符)。

尝试重新排列:

echo '<table id="tab">';
foreach( $this->extra as $value) // ignores the Key and just gets the Value as $row
{
    list( $number, $name, $length ) = $value;  //populates $number, $name, $length from $row
    echo '<tr class="tl">';
    echo '<td>' . $number . '</td>';
    echo '<td>' . $name. '</td>';
    echo '<td>' . $length . '</td>';
    echo '</tr>';
}
echo '</table>';

如果您需要Key值,也可以使用foreach( $this->extra as $key=>value )

答案 3 :(得分:0)

$ counter获取索引。 你必须把

while (list($i,$counter) = each($this->extra))

foreach($this->extra as $counter) {

这是因为每个都返回键值对:

  

返回数组数组中的当前键和值对。