Dat dus.quote:Op vrijdag 25 januari 2008 00:27 schreef Geqxon het volgende:
Ziet er keurig uit! Wat ik alleen persoonlijk als constructor zou doen:
Zodat je bij het aanmaken van het object direct het ID en de Title meegeeft.
Wat nou als de interne werking van het instellen van de titel opeens anders wordt? Stel je voor dat het instellen van de titel naar een database weggeschreven moet worden. Dan mag je dus overal je source-code aan gaan zitten te passen, in plaats van dat je enkel de setTitle method aan hoeft te passen.quote:Op vrijdag 25 januari 2008 09:15 schreef super-muffin het volgende:
Ik zie trouwens niet in waarom je $Id en $Title niet public maakt. Die Get en Set methods zijn overbodig omdat je toch geen controle of iets uitvoert.
Ja klopt, maar was ook puur ter illustratie van wat ik bedoelde..quote:Op vrijdag 25 januari 2008 08:59 schreef Xcalibur het volgende:
[..]
Dat dus.
Het nut van (de mogelijkheid tot) het zetten van een ID ontgaat me ook een beetje, aangezien je deze nu op een vaste waarde zet ín je class. Het is natuurlijk juist de bedoeling dat je dat vanuit je script doet lijkt me?
Controle komt er nog (als je bedoelt qua gebruikers invoer) en die set en get functies daarover had ik ooit gelezen dat het beter was om de variabelen te setten via een functie en niet direct?quote:Op vrijdag 25 januari 2008 09:15 schreef super-muffin het volgende:
Ik zie trouwens niet in waarom je $Id en $Title niet public maakt. Die Get en Set methods zijn overbodig omdat je toch geen controle of iets uitvoert.
In de uiteindelijke situatie worden de ID en title uit een database gehaald.. Dit wilde ik dan binnen de class regelen. Of is dat raar? En wanneer de gegevens niet uit een database worden gehaald, dan worden ze ingevoerd via een formulier, welke ik ook in de class wilde verwerken.. vandaar dat ik de constructor leeg had gelaten..quote:Op vrijdag 25 januari 2008 00:27 schreef Geqxon het volgende:
Ziet er keurig uit! Wat ik alleen persoonlijk als constructor zou doen:
[ code verwijderd ]
Zodat je bij het aanmaken van het object direct het ID en de Title meegeeft.
Je hebt gelijk, je kan ze best direct getten/setten zonder aparte functies, maar een voordeel van getters en setters gebruiken is dat je dan ook nog andere dingen kan doen - zoals bijv een property "isModified" oid op true zetten als je een veld aanpast. Dat kun je dan weer op andere plekken gebruiken, zoals in een save functie: als er niks gewijzigd is hoef je ook niet op te slaan. Verder is het ook makkeliijk mocht je ooit nog besluiten om de structuur van je object (ingrijpend) aan te passen; met getters en setters hoef je dan alleen die functies aan te passen; als je overal objectvariabelen direct benadert moet je het overal in je code gaan aanpassen.quote:Op vrijdag 25 januari 2008 10:23 schreef MuRKie het volgende:
[..]
Controle komt er nog (als je bedoelt qua gebruikers invoer) en die set en get functies daarover had ik ooit gelezen dat het beter was om de variabelen te setten via een functie en niet direct?
Ja, eigenlijk wel. Lijkt me dat je op basis van het ID het record in de database opzoekt. Dus die kan beter wel gezet worden in de constructor.quote:Op vrijdag 25 januari 2008 11:58 schreef MuRKie het volgende:
[..]
In de uiteindelijke situatie worden de ID en title uit een database gehaald.. Dit wilde ik dan binnen de class regelen. Of is dat raar?
Ja dat is waar, dom van me..quote:Op vrijdag 25 januari 2008 13:03 schreef Farenji het volgende:
[..]
Ja, eigenlijk wel. Lijkt me dat je op basis van het ID het record in de database opzoekt. Dus die kan beter wel gezet worden in de constructor.
Afhankelijk van je php instellingen mag je ook een url gebruiken als include. Daar zou je denk ik wel een get parameter aan mee kunnen geven. Maar las het kan dan is het zeker geen manier die ik zou aanraden.quote:Op zaterdag 26 januari 2008 21:38 schreef kamustra het volgende:
Is het mogelijk om bij het includen van bestand (include_once etc..) een $_GET parameter mee te geven?
Edit: laat maar, nee dus![]()
1 2 3 4 5 6 7 | function includeX($file, $_GET) { include($file); } includeX("test/somescript.php", array('id'=> 2, 'page' => 'test' )) ; ?> |
Leg eens uit waarom je dat zou willen?quote:Op zaterdag 26 januari 2008 21:38 schreef kamustra het volgende:
Is het mogelijk om bij het includen van bestand (include_once etc..) een $_GET parameter mee te geven?
Edit: laat maar, nee dus![]()
Om pagina's te includen? index.php?page=bestel&product=stoel ?quote:Op zondag 27 januari 2008 04:37 schreef Farenji het volgende:
[..]
Leg eens uit waarom je dat zou willen?
get en post etc variabelen worden toch al doorgegeven aan de geincludeerde scripts?quote:Op zondag 27 januari 2008 10:32 schreef Flaccid het volgende:
[..]
Om pagina's te includen? index.php?page=bestel&product=stoel ?
De scope van variabelen loopt gewoon door, ook in geinclude bestanden. Bijv:quote:Op zondag 27 januari 2008 10:32 schreef Flaccid het volgende:
[..]
Om pagina's te includen? index.php?page=bestel&product=stoel ?
1 2 3 4 5 | var $poep = "vies"; include("bar.php"); ?> |
1 2 3 | print $poep; ?> |
Behalve als je een bestand include via een urlquote:Op zondag 27 januari 2008 13:58 schreef Farenji het volgende:
De scope van variabelen loopt gewoon door, ook in geinclude bestanden. Bijv:
1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // --- Pagina retourneren --- \\ function displayPage() { switch (fetchPage()) { case fetchPage(): require('includes/' . fetchPage() . '.php'); break; default: require('includes/content.php'); } return $result; } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | // no direct access defined('_ALLOW_ACCESS') or die('Restricted access'); class GuestBook { protected $ID; protected $message; protected $name; protected $fullItem = array(); function __construct() { } function fetchMessages() { $query = "SELECT ID, message, name "; $query .= "FROM guestbook"; $run = mysql_query($query) or die('Bericht is niet opgehaald'); while($result = mysql_fetch_assoc($run)) { $this->storeMessage($result['ID'], $result['message'], $result['name']); } } function storeMessage($ID, $message, $name) { $html = "<div>#" . $ID . " - geschreven door: " . $name; $html .= "<br />"; $html .= $message; $html .= "<br />"; $html .= "<br />"; $this->fullItem[] = $html; } function displayGuestBook() { $html = ""; foreach($this->fullItem as $item) { $html .= $item; } return $html; } } $guestBook = new GuestBook; $guestBook->fetchMessages(); $result = $guestBook->displayGuestBook(); ?> |
1 2 3 4 5 6 7 8 | $page = fetchPage(): if (!empty($page)) { require('includes/' . $page . '.php'); } else { require('includes/content.php'); } ?> |
Ja had ik net ook naar gekeken maar dat haalt opzich niet veel uit.. FetchPage() geeft altijd wat terug.. als $_GET['page'] niet gedeclareerd is geeft hij "content" terug als page..quote:Op zondag 27 januari 2008 17:15 schreef Dreammaster het volgende:
de class wordt waarschijnlijk in de functie fetchPage() gedeclareerd. deze functie roep je al aan bij de switch en dan bij case weer... ik snap trouwens ook niet waarom je een switch statement gebruikt is de onderstaande code niet veel simpeler? Je switch statement zal trouwens ook nooit de content.php requiren.
[ code verwijderd ]
1 2 3 | require('includes/' . fetchPage() . '.php'; ?> |
Nee maar heb inmiddels al wel gevonden wat dat was..quote:Op zondag 27 januari 2008 17:22 schreef Dreammaster het volgende:
als de functie altijd iets returned dan kan dat inderdaad... maar is je fatal-error hiermee opgelost?
1 2 3 | $page = displayPage(); ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | // no direct access defined('_ALLOW_ACCESS') or die('Restricted access'); class GuestBook { protected $ID; protected $name; protected $message; protected $theDate; protected $error; protected $fullItem = array(); function __construct() { $this->setError(false); } function setID($ID) { $this->ID = mysql_real_escape_string(htmlentities($ID)); } function fetchID() { return $this->ID; } function setName($name, $error) { $this->name['value'] = mysql_real_escape_string(htmlentities($name)); $this->name['error'] = $error; } function fetchName() { return $this->name['value']; } function fetchNameError() { return $this->name['error']; } function setMessage($message, $error) { $this->message['value'] = mysql_real_escape_string(htmlentities($message)); $this->message['error'] = $error; } function fetchMessage() { return $this->message['value']; } function fetchMessageError() { return $this->message['error']; } function setDate($theDate) { $this->theDate = $theDate; } function fetchDate() { return $this->theDate; } function setError($error) { $this->error = $error; } function fetchError() { return $this->error; } function listMessages() { $query = "SELECT ID, message, name, date "; $query .= "FROM guestbook "; $query .= "ORDER BY `ID` ASC "; //$query .= "LIMIT 0 , 30"; $run = mysql_query($query) or die('Berichten zijn niet opgehaald!<br /><i>' . mysql_error() . '</i>'); $numb = 1; while($result = mysql_fetch_assoc($run)) { $this->storeMessage($numb, $result['message'], $result['name'], $result['date']); $numb++; } } function storeMessage($ID, $message, $name, $date) { $html = "<div>#" . $ID . " - geschreven door: " . $name . " op " . $date; $html .= "<br />"; $html .= $message; $html .= "<br />"; $html .= "<br />"; $this->fullItem[] = $html; } function processForm() { $this->setDate(date('l, d F Y - H:i:s')); if($_POST['name'] != "") { $this->setName($_POST['name'], ''); } else { $this->setName($_POST['name'], 'Vergeten je naam in te vullen!'); $this->setError(true); } if($_POST['message'] != "") { $this->setMessage($_POST['message'], ''); } else { $this->setMessage($_POST['message'], 'Vergeten een berichtje in te vullen!'); $this->setError(true); } if($this->fetchError() == false) { $query = "INSERT INTO guestbook "; $query .= "SET message = '" . $this->fetchMessage() . "', name = '" . $this->fetchName() . "', date = '" . $this->fetchDate() . "'"; $run = mysql_query($query) or die('Invoeren niet gelukt!<br /><i>' . mysql_error() . '</i>'); header('Location: ' . cmsConfig_siteRoot . 'page/guestbook/view'); } } function displayWrite() { $html .= "<form action=\"" . cmsConfig_siteRoot . "page/guestbook/add\" method=\"post\" name=\"sendMessage\">"; $html .= "<table>\n"; $html .= "<tr>\n"; $html .= "<td>Naam: <input name=\"name\" type=\"text\" size=\"10\" value=\"" . $this->fetchName() . "\" maxlength=\"50\" />" . $this->fetchNameError() . "</td>\n"; $html .= "</tr>"; $html .= "<tr>"; $html .= "<td>Bericht: <textarea name=\"message\" cols=\"20\" rows=\"5\">" . $this->fetchMessage() . "</textarea>" . $this->fetchMessageError() . "</td>"; $html .= "</tr>"; $html .= "<tr>"; $html .= "<td><input name=\"submit\" type=\"submit\" value=\"Versturen!\"></td>"; $html .= "</tr>"; $html .= "</table>"; $html .= "</form>"; return $html; } function displayGuestBook() { $this->listMessages(); $html = ""; foreach($this->fullItem as $item) { $html .= $item; } $html .= $this->displayWrite(); return $html; } } $guestBook = new GuestBook(); if(fetchType() == "add") { if(isset($_POST['submit'])) { $guestBook->processForm(); } } $result = $guestBook->displayGuestBook(); ?> |
Persoonlijk vind ik dingen als ditquote:Op zondag 27 januari 2008 17:31 schreef MuRKie het volgende:
[..]
Nee maar heb inmiddels al wel gevonden wat dat was..
Er stond in de index.php nog het volgende:
[ code verwijderd ]
terwijl ik die al niet meer gebruikte.. Dus daar werd hij al eerder aangeroepen dan dat eigenlijk moest..
Heb dus beide nu aangepast..
Ik ben nu alsvolgt bezig met het gastenboek. Ik wilde alleen van jullie weten of dit correct OOP gebruik is, aangezien ik nog 0 ervaring met OOP heb.
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 | function setDate($theDate) { $this->theDate = $theDate; } function fetchDate() { return $this->theDate; } ?> |
alleen nutteloze extra regels code..? dat vond ik ook steeds meer.. ik had dit ooit ergens gezien en las dat het zo het beste was. ikzelf ben steeds meer gaan vinden dat het overbodige code is..quote:Op zondag 27 januari 2008 21:49 schreef Thomass het volgende:
[..]
Persoonlijk vind ik dingen als dit
[ code verwijderd ]
vrij nutteloos, als je de variabelenaam gewoon een heldere naam geeft dan zijn die get/set methoden echt niet nodig
hoe bedoel je dat? zoals ik dat heb gedaan, in strings?quote:Op zondag 27 januari 2008 23:02 schreef Xcalibur het volgende:
ik vind getters en setters op zich wel netter, maar vooral in de code waarin je ze gebruikt
Het gebruik van HTML in je PHP (en dan nog in een class ook) vind ik ranzig trouwens!
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |