Oefenen met functions - is dit mogelijk?
Aller eerst: iedereen de beste wensen en een goed gelukkig 2013 waarbij al je dromen/wensen uit mogen komen.
Vorig jaar (klinkt ver :P) Werd er mij verteld dat ik functions moest leren zodat dingen makkelijker zouden gaan... Daarom luid mijn vraag: zou ik onderstaande code in een function kunnen zetten?
Groeten Donny
Code (php)
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
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
<?php
///////////////////////////////////////////////////////// MAIL FUNCTIE VOOR NIEUWE MEDEDELING //////////////////////////////////////////
$onderwerp_for_mail = $_POST['bericht'];
$ophaal_query = mysql_query ("SELECT * FROM users WHERE mail_note=1");
$i = "0";
if(mysql_num_rows($ophaal_query) >= 1){
while ($get_contact = mysql_fetch_assoc($ophaal_query)){
$to = $get_contact['username'];
$subject = $onderwerp_mail;
$i++;
$message = "Beste gebruiker,
Er is een nieuwe mededeling geplaats op $site_titel met als onderwerp: $onderwerp_for_mail ! Klik <a href'#'>hier</a> om in te loggen.
---------------------------------------------------
---------------------------------------------------
Geen emails meer ontvangen? Log in met je account,
en klik op mijn gegevens om je instellingen te
wijzigen.
";
$headers = "From: [email protected]";
mail($to,$subject,$message,$headers);
$mail_bericht = "Er is/zijn ".$i." gebruiker(s) die een email heeft/hebben ontvangen.";
}
} else {
$mail_bericht = "Er zijn geen emails verstuurd!";
echo $i;
}
///////////////////////////////////////////////////////// MAIL FUNCTIE VOOR NIEUWE MEDEDELING //////////////////////////////////////////
?>
///////////////////////////////////////////////////////// MAIL FUNCTIE VOOR NIEUWE MEDEDELING //////////////////////////////////////////
$onderwerp_for_mail = $_POST['bericht'];
$ophaal_query = mysql_query ("SELECT * FROM users WHERE mail_note=1");
$i = "0";
if(mysql_num_rows($ophaal_query) >= 1){
while ($get_contact = mysql_fetch_assoc($ophaal_query)){
$to = $get_contact['username'];
$subject = $onderwerp_mail;
$i++;
$message = "Beste gebruiker,
Er is een nieuwe mededeling geplaats op $site_titel met als onderwerp: $onderwerp_for_mail ! Klik <a href'#'>hier</a> om in te loggen.
---------------------------------------------------
---------------------------------------------------
Geen emails meer ontvangen? Log in met je account,
en klik op mijn gegevens om je instellingen te
wijzigen.
";
$headers = "From: [email protected]";
mail($to,$subject,$message,$headers);
$mail_bericht = "Er is/zijn ".$i." gebruiker(s) die een email heeft/hebben ontvangen.";
}
} else {
$mail_bericht = "Er zijn geen emails verstuurd!";
echo $i;
}
///////////////////////////////////////////////////////// MAIL FUNCTIE VOOR NIEUWE MEDEDELING //////////////////////////////////////////
?>
Gewijzigd op 02/01/2013 09:56:59 door Donny Wie weet
http://php.net/manual/en/language.functions.php.
Wanneer je dit hebt gelezen + de opvolgende pagina's, zal het een stuk duidelijker voor je zijn. Indien je hierna nog vragen hebt, kan je ze hier achterlaten.
Veel succes!
Natuurlijk kun je dat in een functie zetten. Maar voor functies geldt eigenlijk hetzelfde als voor Object-georienteerd programmeren: iedere functie moet een goed afgebakend doel hebben.
Je moet eerst een goed ontwerp maken waarbij je het script opdeelt in gescheiden blokken. Het voordeel is dat je het hoofdprogramma heel overzichtelijk kunt houden. (En dus minder risico van fouten.)
Je hoofdprogramma kan dan worden:
Code (php)
Het commentaar van de functie heeftEmail() kan er dan zo uitzien:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
/**
* boolean heeftEmail(void)
* controleer of de gebruiker e-mail heeft.
* in: niets
* uit: een bool. True: er is e-mail; False: er is geen e-mail
*/
* boolean heeftEmail(void)
* controleer of de gebruiker e-mail heeft.
* in: niets
* uit: een bool. True: er is e-mail; False: er is geen e-mail
*/
Die functie heeft dan een duidelijk afgebakend doel. Ik denk dat je de functie nu gemakkelijk kunt schrijven.
@Not Moose: nee er staat geen function. Maar Donny vraagt ook of hij er een functie van kan maken.
Wijziging 2013-01-02 12:43: Tip van Wouter J over comment-style met dank overgenomen.
Gewijzigd op 02/01/2013 12:43:37 door Ivo Breeden
Maar wat jij nu hebt aan code is niet makkelijker/beter in een functie.
Functies gebruik je vooral als je meerdere keren hetzelfde wilt doen, op verschillende plekken.
En je gebruikt nu al de functie mail(). Met een hoop tekst erboven (wat korter zou kunnen, maar dat is weer niet overzichtelijker).
Het kan zeker wel met een functie:
Code (php)
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
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
<?php
// functie mail2members die ze mailt als er een nieuwe mededeling is
function mail2members($onderwerp = 'Geen onderwerp', $emailadres)
{
// vars verkrijgen
global $site_titel; // want die bestaat blijkbaar globaal?
$onderwerp = htmlentities($onderwerp); // je wilt geen rare dingen....
$message = 'Beste '.$emailadres.',
Er is een nieuwe mededeling geplaats op '.$site_titel.' met als onderwerp: '.$onderwerp.'!
Klik <a href="">hier</a> om de pagina te openen.
---------------------------------------------------
??????
---------------------------------------------------
Geen emails meer ontvangen? Klik <a href="">hier</a>.';
$headers = "From: [email protected]"; // deze zijn nog niet compleet!!!!
// mail deze alsnog en return het resultaat (true of false)
return mail($emailadres, $onderwerp, $message, $headers);
}
// naar welke users gaan we dit sturen?
$sql = "SELECT username FROM users WHERE mail_note = 1";
$res = mysql_query($sql);
// while-loop aflopen, ook als er geen leden zijn
$succes = $fail = 0;
while($rij = mysql_fetch_assoc($res))
{
if(mail2members($onderwerp, $rij['username']))
{
$succes++;
}
else
{
$fail++;
$fails[] = $rij['username'];
}
}
echo 'Er zijn '.$succes.' mails verstuurd. <br>
Er konden er '.$fail.' niet worden verstuurd. <br>
Namelijk die aan:<br>
<br>
'.implode("<br>",$fails);
?>
// functie mail2members die ze mailt als er een nieuwe mededeling is
function mail2members($onderwerp = 'Geen onderwerp', $emailadres)
{
// vars verkrijgen
global $site_titel; // want die bestaat blijkbaar globaal?
$onderwerp = htmlentities($onderwerp); // je wilt geen rare dingen....
$message = 'Beste '.$emailadres.',
Er is een nieuwe mededeling geplaats op '.$site_titel.' met als onderwerp: '.$onderwerp.'!
Klik <a href="">hier</a> om de pagina te openen.
---------------------------------------------------
??????
---------------------------------------------------
Geen emails meer ontvangen? Klik <a href="">hier</a>.';
$headers = "From: [email protected]"; // deze zijn nog niet compleet!!!!
// mail deze alsnog en return het resultaat (true of false)
return mail($emailadres, $onderwerp, $message, $headers);
}
// naar welke users gaan we dit sturen?
$sql = "SELECT username FROM users WHERE mail_note = 1";
$res = mysql_query($sql);
// while-loop aflopen, ook als er geen leden zijn
$succes = $fail = 0;
while($rij = mysql_fetch_assoc($res))
{
if(mail2members($onderwerp, $rij['username']))
{
$succes++;
}
else
{
$fail++;
$fails[] = $rij['username'];
}
}
echo 'Er zijn '.$succes.' mails verstuurd. <br>
Er konden er '.$fail.' niet worden verstuurd. <br>
Namelijk die aan:<br>
<br>
'.implode("<br>",$fails);
?>
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
/**
* @Pure
*/
function sayHello($name = 'world')
{
return 'Hello '.$name;
}
?>
/**
* @Pure
*/
function sayHello($name = 'world')
{
return 'Hello '.$name;
}
?>
De Io functie is een afkorting van Input/Output functie. Deze kan ook communiceren met de buitenwereld. Elke functionele applicatie heeft sowieso 1 Io functie, de functie Main die je aanroept:
Code (php)
@Ivo, ik raad aan om daarvoor de bekende PHPdoc syntaxen te gebruiken:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
/**
* Groet een naam
*
* @param string $name De naam
* @param string $language De taal waarin gegroet wordt
*
* @return string De begroeting
*
* @Pure
*/
function sayHello($name, $language)
{
return getGreet($language).' '. $name;
}
?>
/**
* Groet een naam
*
* @param string $name De naam
* @param string $language De taal waarin gegroet wordt
*
* @return string De begroeting
*
* @Pure
*/
function sayHello($name, $language)
{
return getGreet($language).' '. $name;
}
?>
1) om repeterende code te voorkomen. Als je meer dan 1 keer hetzelfde doet, vat je dat in een functie zodat je alleen de functie aanroep hoeft te herhalen, niet de hele berg code. Dit schoont je script over het algemeen op en zorgt dat onderhoud aan je code eenvoudiger wordt. Mocht je een foutje ontdekken dan hoef je dat maar op 1 plek aan te passen.
2) om lange lappen code op te breken. Ook als je code op zich niet herhalend is (en ook niet voor gebruik in een andere applicatie) kan het soms toch beter zijn om je code in brokken op te delen en elk brok apart in een functie te plaatsen. Dit kan je code in veel gevallen veel beter leesbaar maken.
@Eddy
Let wel op dat je parameters met een default waarde altijd zo rechts mogelijk zet. Zoals je het nu hebt zal je functie niet werken, omdat php een foutmelding zal geven. Omdat je eerste parameter een default heeft, moet de tweede dat ook hebben.