2011-09-06 105 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)如果您需要的鍵值。