20. december 2003 - 16:11Der er
9 kommentarer og 1 løsning
Programmering i klasser
Hej alle
Jeg har nu kodet PHP i en del år, og har nu fået noget mere erfaring inden for objekt orienteret programmering, igennem Java, C# og C++.
Jeg vil derfor høre, om der er nogen, som har erfaringer med PHP og klasser, da jeg ikke mener der er nogle specielt gode tutorials derude. Mit problem er ikke at oprette klassen osv, men jeg synes ikke jeg kan se sammenhængen i, at man har sin HTML, og så har man sine klasser ved siden af? For ens HTML kode, bliver vel alligevel fyldt med funktionskald igennem klasserne, eller er jeg helt galt på den?
Jeg kunne eventuelt godt tænke mig nogle eksempler.
Selv foretrækker jeg at gemme html'en i variabler for skrive det ud til sidst... det giver generelt et bedre overblik over koden (min subjektive holdning)... Se... <? include('main.php'); if($user->isLogged()) { $content = 'text bal bla bla dit brugernavn er '.$user->displayUsername().' ho ho'; } else { $content = 'du er ikke logget ind...'; } $template->displaySite($content);
Hvad indeholder main så? Indeholder den både "headeren" og "footeren" af siden, for det kan vel ikke lade sig gøre, da PHP jo samler alt indhold i rækkefølge, og så bagefter sender det hele til browseren?
Synes godt om
Slettet bruger
21. december 2003 - 22:14#4
det er netop det smarte i at køre udseendet i en template-klasse...
forestil dig f.eks. $template->setRedTheme();//kører rødt tema på siden... $template->displaySite($content); elller $template->setGreenTheme();//kører grønt tema på siden.. $template->displaySite($content);
displaySite($content) smider header og footer rundt om $content...
main.php indeholder klasser, configurationer, oprettelse af forbindelse til database mm.
Hvis nu jeg nu har en header og en footer fil, som skal inkluderes henholdsvis over og under mit indhold. Så har vi derinde, en god gang HTML: <? include ("header.php"); ?> <table cellpadding="2" cellspacing="0" width="100%"> <? include ("admin/inc/connect.php"); $query = mysql_query("SELECT overskrift, link FROM forside_nyheder ORDER BY oprettet DESC LIMIT 4"); while ($row = mysql_fetch_array($query)) { ?> <tr> <td> <? if ($row["link"]) { ?> <a href="<?=$row["link"]?>" target="_self"><?=stripslashes($row["overskrift"])?></a> <? } else { ?> <?=stripslashes($row["overskrift"])?> <? } ?> </td> </tr> <? } print mysql_error();?> </table> <? include ("footer.php"); ?>
Header og footer filer er noget "pjat" da det begrænser din brug af header(); sætning af cookies og sessions. Men hvis du absolut vil være oldnordisk...
<? include('main.php');//main indeholder blandt andet class nyhed() include ("header.php"); ?> <table cellpadding="2" cellspacing="0" width="100%"> <? include ("admin/inc/connect.php"); $query = mysql_query("SELECT overskrift, link FROM forside_nyheder ORDER BY oprettet DESC LIMIT 4"); while ($row = mysql_fetch_array($query)) { $nyhed = new nyhed(); $nyhed->fraDatabaseRow($row); echo '<tr> <td>'.$nyhed->displayOverskrift().'</td> </tr>' } ?> </td> </tr> <? } print mysql_error();?> </table> <? include ("footer.php"); ?>
functionen displayOverskrift() finder selv ud af om der skal smides et link rundt om nyhedens overskrift
Okay, jamen så må du jo forklare mig noget bedre, hvordan jeg så lad vær' med at forblive oldnordisk... Synes ikke jeg har kunne finde ud af dine eksempler indtil videre...
Synes godt om
Slettet bruger
22. december 2003 - 16:15#9
class template() { var $theme = 'red'; function header() { include($this->theme.'.header.php'); }
function footer() { include($this->theme.'.footer.php'); }
function displaySite($content) { $this->header(); echo $content; $this->footer(); }
function setTheme($theme) { switch($theme) { case 'green': $this->theme='green'; break; case 'blue': $this->theme='blue'; break; case 'red': default: $this->theme='red': break; } } } Så er vi over header.php/footer.php problematikken... plus lidt mere lir..
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.