abonnement Unibet Coolblue Bitvavo
pi_56292733
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.
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?
pi_56292932
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.
pi_56293111
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.
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.
  vrijdag 25 januari 2008 @ 10:22:08 #244
67938 MuRKie
..warm as butters..
pi_56294043
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?
Ja klopt, maar was ook puur ter illustratie van wat ik bedoelde..
  vrijdag 25 januari 2008 @ 10:23:50 #245
67938 MuRKie
..warm as butters..
pi_56294097
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.
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?

[ Bericht 5% gewijzigd door MuRKie op 25-01-2008 11:06:00 ]
  vrijdag 25 januari 2008 @ 11:58:04 #246
67938 MuRKie
..warm as butters..
pi_56296309
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.
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..
pi_56297803
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?
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.
pi_56297867
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, 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.
  vrijdag 25 januari 2008 @ 13:38:21 #249
67938 MuRKie
..warm as butters..
pi_56298590
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.
Ja dat is waar, dom van me..
De ID wordt natuurlijk niet uit de DB gehaald want aan de hand van de ID haal je het record juist op..
ID kan dus wel in de __construct want die wordt via de $_GET variabele bepaald..
pi_56328026
Is het mogelijk om bij het includen van bestand (include_once etc..) een $_GET parameter mee te geven?
Edit: laat maar, nee dus

[ Bericht 18% gewijzigd door kamustra op 26-01-2008 21:51:28 ]
pi_56331250
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
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.
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
  zondag 27 januari 2008 @ 00:31:03 #252
85514 ralfie
!Yvan eht nioj
pi_56331821
include het bestand in een functie waarin je de get variabele set:

1
2
3
4
5
6
7
<?php
function includeX($file$_GET) {
      include(
$file);
}

includeX("test/somescript.php", array('id'=> 2'page' => 'test' )) ;
?>
oid

edit: moet je die supervariabelen natuurlijk wel eerst unsetten, anders heeft dit nog geen nut.

[ Bericht 7% gewijzigd door ralfie op 27-01-2008 00:36:16 ]
pi_56334272
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
Leg eens uit waarom je dat zou willen?
pi_56335407
quote:
Op zondag 27 januari 2008 04:37 schreef Farenji het volgende:

[..]

Leg eens uit waarom je dat zou willen?
Om pagina's te includen? index.php?page=bestel&product=stoel ?
  zondag 27 januari 2008 @ 10:37:39 #255
85514 ralfie
!Yvan eht nioj
pi_56335463
quote:
Op zondag 27 januari 2008 10:32 schreef Flaccid het volgende:

[..]

Om pagina's te includen? index.php?page=bestel&product=stoel ?
get en post etc variabelen worden toch al doorgegeven aan de geincludeerde scripts?
pi_56339307
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:

foo.php:
1
2
3
4
5
<?php
var $poep "vies";

include(
"bar.php");
?>


bar.php:
1
2
3
<?php
print $poep;
?>


Dit geeft als output gewoon "vies".
Zelfde werkt het voor $_GET en $_POST variabelen.
pi_56341346
quote:
Op zondag 27 januari 2008 13:58 schreef Farenji het volgende:
De scope van variabelen loopt gewoon door, ook in geinclude bestanden. Bijv:
Behalve als je een bestand include via een url (Wat af te raden is)
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
  zondag 27 januari 2008 @ 16:39:15 #258
67938 MuRKie
..warm as butters..
pi_56342844
ik ben bezig met een website voor de 50ste verjaardag van mijn schoonmoeder. Ik include daarin een pagina waarin ik een class declareer maar ik krijg de melding
1Fatal error: Cannot redeclare class GuestBook in C:\xampp\htdocs\maria\includes\guestbook.php on line 10
(hieronder dan regel 7 maar in Dreamweaver staat hij gewoon op 10)
Dat houdt toch in dat hij al eerder gedeclareerd zou moeten zijn want dat is namelijk niet het geval..

Hier de code hoe ik het bestand include:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
// --- Pagina retourneren --- \\
function displayPage()
{
    switch (
fetchPage())
    {
        case 
fetchPage():
            require(
'includes/' fetchPage() . '.php');
            break;
        default:
            require(
'includes/content.php');
    }
    
    return 
$result;        
}
?>


en hier de code met de class:
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
<?php
// 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();
?>


Iemand enig idee hoe dit komen kan?
pi_56343472
Door mijn HTML-output van tabs en newlines te strippen kan ik mijn sourcode van 9,69 naar 8,21 kilobyte verkleinen. Maar hoe zwaar is het voor mijn server als ik via str_replace alle tabs en newlines strip? Ik neem aan dat hij in een for-lus alle chars af gaat, op zoek naar een \t, en deze vervangt voor een blanke char?
  zondag 27 januari 2008 @ 17:15:24 #260
39436 Dreammaster
Dat zei je moeder vannacht ook
pi_56343528
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.

1
2
3
4
5
6
7
8
<?php
$page 
fetchPage():
if (!empty(
$page)) {
    require(
'includes/' $page '.php');
} else {
    require(
'includes/content.php');
}
?>
  zondag 27 januari 2008 @ 17:19:24 #261
67938 MuRKie
..warm as butters..
pi_56343604
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 ]
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..
Dus het resultaat blijft hetzelfde.. Maar scheelt idd wel paar regels.. Dan kan ik het ook nog alsvolgt doen:
1
2
3
<?php
require('includes/' fetchPage() . '.php';
?>

volgens mij das nog veel korter ook

Enne zelfde methode gebruik ik ook in een CMS waar ik mee bezig ben en daar werkt het wel gewoon prima..
  zondag 27 januari 2008 @ 17:22:46 #262
39436 Dreammaster
Dat zei je moeder vannacht ook
pi_56343667
als de functie altijd iets returned dan kan dat inderdaad... maar is je fatal-error hiermee opgelost?
  zondag 27 januari 2008 @ 17:31:01 #263
67938 MuRKie
..warm as butters..
pi_56343823
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?
Nee maar heb inmiddels al wel gevonden wat dat was..
Er stond in de index.php nog het volgende:
1
2
3
<?php
$page
= displayPage();
?>

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.
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
<?php
// 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();
?>


[ Bericht 92% gewijzigd door MuRKie op 27-01-2008 18:27:50 ]
pi_56346324
ik code vaag

[ Bericht 90% gewijzigd door Flaccid op 27-01-2008 20:26:33 ]
  zondag 27 januari 2008 @ 21:20:28 #265
67938 MuRKie
..warm as butters..
pi_56348687
quote:
Op zondag 27 januari 2008 19:36 schreef Flaccid het volgende:
ik code vaag
?
pi_56349419
quote:
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 ]
Persoonlijk vind ik dingen als dit
1
2
3
4
5
6
7
8
9
10
11
<?php
    
function setDate($theDate)
    {
        
$this->theDate $theDate;
    }
    
    function 
fetchDate()
    {
        return 
$this->theDate;
    }
?>

vrij nutteloos, als je de variabelenaam gewoon een heldere naam geeft dan zijn die get/set methoden echt niet nodig
  zondag 27 januari 2008 @ 22:58:48 #267
67938 MuRKie
..warm as butters..
pi_56351535
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
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..

maarja ik had gelezen dat het goed zou zijn op deze manier ofzo
pi_56351628
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!
  zondag 27 januari 2008 @ 23:10:19 #269
67938 MuRKie
..warm as butters..
pi_56351825
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!
hoe bedoel je dat? zoals ik dat heb gedaan, in strings?

hoe doe jij dat normaal dan? ik leer graag nieuwe dingen..
pi_56351915
de PHP in de phpbestanden, de HTML in de template bestanden, strict gescheiden dus
En alle opmaak in CSS bestanden natuurlijk.

Ik gebruik zelf Smarty als template engine, werkt erg prettig vind ik. Er zijn een heleboel alternatieven in omloop, inclusief het nodige zelfbouw wat ik hier voorbij zie komen ...

Het punt van html in je PHP is dat je al je code na kan gaan lopen als je je lay-out wilt veranderen. En eigenlijk wil je dan alleen je CSS aanpassen, want daar is het voor
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')