Oefenen met functions - is dit mogelijk?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Donny Wie weet

Donny Wie weet

02/01/2013 09:56:24
Quote Anchor link
Hoi allemaal,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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 //////////////////////////////////////////
?>
Gewijzigd op 02/01/2013 09:56:59 door Donny Wie weet
 
PHP hulp

PHP hulp

22/12/2024 07:43:49
 
Erik Rijk

Erik Rijk

02/01/2013 10:00:11
Quote Anchor link
Ik vind het eigenlijk geen vraag die je hier zou moeten stellen.

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!
 
Moose -

Moose -

02/01/2013 10:11:16
Quote Anchor link
een function begin met de syntax
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
function
ik zie dat nergens staan
 
Ivo Breeden

Ivo Breeden

02/01/2013 10:31:12
Quote Anchor link
Beste Donny,
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if (heeftEmail()) {
  echo "Beste gebruiker, ... u heeft e-mail ... enz.";
}
else {
  echo "Er zijn geen emails verstuurd!";
}

?>

Het commentaar van de functie heeftEmail() kan er dan zo uitzien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
 */

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
 
Eddy E

Eddy E

02/01/2013 10:49:58
Quote Anchor link
Wel in elk voorbeeld...

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);
    
    
    
    
?>
 
Wouter J

Wouter J

02/01/2013 11:00:36
Quote Anchor link
Kijk als je in functies gaat werken dan zou ik het ook meteen goed doen en de technieken van echte functionele programming talen als Haskell gaan volgen. Daarin heb je 2 soorten functies: Pure en Io functies. De Pure functies doen niks anders dan een waarde krijgen, er iets meer doen en die weer terug sturen, dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
/**
 * @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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
/**
 * @Io
 */

function main()
{

    echo sayHello(isset($_GET['foo']) ? $_GET['foo']: 'World');
}

?>



@Ivo, ik raad aan om daarvoor de bekende PHPdoc syntaxen te gebruiken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
}

?>
 
Erwin H

Erwin H

02/01/2013 11:01:48
Quote Anchor link
In navolging van Eddy en Ivo zou ik willen opmerken dat je functies op twee momenten gebruikt.
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.