probleempje in script met oop

Status
Niet open voor verdere reacties.

hobielasseel

Gebruiker
Lid geworden
10 apr 2011
Berichten
142
Hallo allemaal

Sinds kort ben ik bezig met oop in php en nu heb ik een script geschreven dat een unordered list maakt

het probleem is hem nu dat het bolletje wel verschijnt maar de tekst zelf niet dit is de code

PHP:
				<?php
					class Ul{
						private $_listitems;
						
						public function __construct(){
							$this->_listitems = array();
						}
						
						public function append($listitem){// append=toevoegen 
							$this->_listitems[] = $listitem;
						}
						// deze functie voegt items toe in de array waardoor we oneindig veel listtags kunnen maken

						public function draw(){
							echo "<ul>\n";
							foreach($this->_listitems as $listitem){
								echo"<li>\n";
								echo"</li>\n";
							}
							echo"</ul>\n";
						}
					}
					class Li{
						private $_listcontent;
						
						public function __construct($listcontent){
							$this->_listcontent = $listcontent;
						}
						
						public function getListcontent(){//getListcontent wordt met haakjes geschreven omdat $_listcontent als private is gedeclareerd
							return $this->_listcontent;
						}
					}
					//procedurele code
					$listitem1= new Li('dit is het eerste item');
										
					$ul=new Ul();
					$ul->append($listitem1);
					$ul->draw();
				?>
dit is het resultaat:http://test.tlindeken.be/nieuws.php

Aangezien ik nog niet zolang bezig ben met oop ga ik ervan uit dat niet alles perfect gescript wordt zoals het hoort.
Tips om het script eenvoudiger of duidelijker te maken zijn dus altijd welkom
 
Je zegt dan ook nergens wat hij met het listitem moet doen. je huidige functie zou dus dit moeten zijn:

PHP:
                        public function draw(){
                            echo "<ul>\n";
                            foreach($this->_listitems as $listitem){
                                echo"<li>";
                                echo $listitem;
                                echo"</li>";
                            }
                            echo"</ul>\n";
                        }
Die newlines heb je trouwens niet nodig.

Maar, die echo's direct in je class zetten is niet erg flexibel. Je kunt die functie de html beter laten wegschrijven naar een variabele binnen de class (een eigenschap van de class dus), die je vergvolgens weer ergens ansders kunt afdrukken. Classes horen ook niet thuis in de bestanden waar je HTML komt te staan, over het algemeen is het handig om elke class z'n eigen bestandje te geven (tenzij ze erg klein zijn, dan zou je meerdere classes kunnen gaan bundelen), Je functie zou iets als dit kunnen worden:
PHP:
public function draw(){
	$this->hmtlList = '';
    $this->hmtlList .= "<ul>";
    foreach($this->_listitems as $listitem){
        $this->hmtlList .= "<li>";
        $this->hmtlList .= $listitem;
        $this->hmtlList .= "</li>";
    }
    $this->hmtlList .= "</ul>";
}
je zou die dan elders zo kunnen gebruiken.

PHP:
$list = new Ul();
$list->draw();
//voeg items aan de lijst toe met de append functie
echo $list->htmlList;

Ik zie trouwens niet wat de bedoeling is van die Li class (gewoon oefening?) $ul->append('Dit is het eerste item'); zou net zo goed moeten werken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan