2011-09-06 76 views
1

免责声明:我是新来的面向对象的PHP,我通常在语言上很糟糕。PHP对象/变量错误

所以我有一个名为“页面”的文件(class_lib.php)班,我已经创造了这个变量,并写了一段/ for循环处理它时,它的设定:

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') 
        ); 

我得到的错误是:

Notice: Undefined variable: extra in C:\wamp\www\test\class_lib.php on line 47

...和:

Fatal error: Cannot access empty property in C:\wamp\www\test\class_lib.php on line 47

以下是完整class_lib.php文件如果需要: http://pastebin.com/7XRjDKVU

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

我希望我已经提供了足够的信息 - 我会很感激任何帮助。

回答

2

你misstyped变量:

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

应该

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

看看$这个 - >额外

+0

好吧,谢谢,这消除了错误,现在我得到一张宽度约2px的表格,其中没有任何值。必须是错误的循环... – Dan

+0

试试这个http://pastebin.com/XEGa3iT3 –

+0

谢谢!我需要在我的循环上工作:D – Dan

1
$this->$extra 

应该是:

$this->extra 
+0

好的,谢谢,那删除了错误,现在我得到一个宽度约为2px的表格,没有任何值。必须在循环中出现错误... – Dan

+0

根据您的发布代码,您正试图访问$ this-> extra,然后它已经填充了数据。您需要首先插入数据,然后_访问它。 –

0

$ counter获取索引。 你必须把

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

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

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

Returns the current key and value pair from the array array.

1

除了别人怎么写$this->extra,你误使用list()$counter

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

问题是这一行:

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

什么情况是,each()拉从$this->extra数据的下一键 - >值对。然后list()用来自该对的第一个值(它是关键字值)填充$counter。由于$counter现在保存密钥的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>'; 

你也可以使用foreach($this->extra as $key=>value)如果您需要的键值。