2011-04-28 50 views
2

我想創建一個自定義類,並有一個這些對象的數組,我似乎無法得到它的工作。這裏是我的代碼:PHP自定義類的數組

class NavigationItem 
{ 


private $_filename; 
private $_linkname; 

public function __construct($filename, $linkname) 
{ 
    parent::__construct(); 

    $this->_filename = $filename; 
    $this->_linkname = $linkname; 
} 

public function getFilename() 
{ 
    return $_filename; 
} 

public function getLinkname() 
{ 
    return $_linkname; 
} 
} 

$navInfo = array(); 

$size = array_push($navInfo, new NavigationItem("index.php","HOME"), 
            new NavigationItem("about.php","ABOUT"), 
            new NavigationItem("coaches.php","STAFF"), 
            new NavigationItem("summer.php","SUMMER 2011"), 
            new NavigationItem("fall.php","FALL 2011"), 
            new NavigationItem("history.php","HISTORY"), 
            new NavigationItem("contact.php","CONTACT")); 

echo "<table>"; 
echo "<tr>"; 
echo "<td colspan=\"7\" height=\"125px\"><img src=\"images/banner_blue_skinny.jpg\" alt=\"\" /></td>"; 
echo "</tr>"; 
echo "<tr>"; 

for($i=0; $i<$size; $i++) 
{ 
echo "<td class=\"linkCell\"><a class=\"navigation\" href=\"" . $navInfo[$i]->getFilename() . "\">" . $navInfo[$i]->getLinkname() . "</a></td>"; 
} 

echo "</tr>"; 

echo "<tr>"; 
echo "<td colspan=\"7\" class=\"gapCell\"></td>"; 
echo "</tr>"; 

echo「」; echo「」;

任何想法?

+0

你想要做什麼父類:parent :: __ construct();'?你不從一個繼承? – 2011-04-28 15:05:31

回答

5

$this用於在類的方法內表示類的對象,應該用於訪問屬性並在同一類的其他方法內調用方法。

public function getFilename() 
{ 
    return $this->_filename; 
} 

刪除父的電話從你的類的構造函數構造,因爲它沒有從其它類

//parent::__construct(); 
+0

不要按照答案中的建議評論'parent :: __ construct();',應該刪除該行。評論代碼是一個壞習慣。 – 2011-04-28 15:14:52

+0

@matt:你沒有得到我所說的'刪除...的電話',我只是給他發了評論 – 2011-04-28 15:16:18

+0

謝謝。就是這樣! – rplankenhorn 2011-04-28 15:17:50

3
class NavigationItem 
{ 

    private $_filename; 
    private $_linkname; 

    public function __construct($filename, $linkname) 
    { 
     $this->_filename = $filename; 
     $this->_linkname = $linkname; 
    } 

    public function getFilename() 
    { 
     return $this->_filename; 
    } 

    public function getLinkname() 
    { 
     return $this->_linkname; 
    } 
} 

訪問類屬性繼承,你必須使用$this->(不比如在Java中)。

爲了獲得更好的可重構性,您可以縮進代碼。 parent::__construct()也沒用,因爲你不從另一個類繼承。

現在的陣列使用,只是一對夫婦的技巧是(IMO),使其更具可讀性:

$navInfo = array(
    new NavigationItem("index.php","HOME"), 
    new NavigationItem("about.php","ABOUT"), 
    new NavigationItem("coaches.php","STAFF"), 
    new NavigationItem("summer.php","SUMMER 2011"), 
    new NavigationItem("fall.php","FALL 2011"), 
    new NavigationItem("history.php","HISTORY"), 
    new NavigationItem("contact.php","CONTACT") 
); 

foreach ($navInfo as $item) { 
    echo $item->getFilename() . "..." . $item->getLinkname(); 
} 

隨着foreach,你不需要知道數組的大小,你只是想迭代通過每個項目(你不關心物品的索引)。