[php] Functie werkt niet (krijg geen waarde terug)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Rexomnium
  • Registratie: September 2000
  • Laatst online: 17-09 16:07

Rexomnium

Vincam aut moriar

Topicstarter
Ik heb het volgende php-script:
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
52
53
54
55
56
57
58
59
<?php
function datecompare($month)
{
    global $month1, $month2;
    if ($month == 01)
        {
            $month = "January";
        }
    elseif ($month == 02)
        {
            $month = "February";
        }
    elseif ($month == 03)
        {
            $month = "March";
        }
    elseif ($month == 04)
        {
            $month = "April";
        }
    elseif ($month == 05)
        {
            $month = "May";
        }
    elseif ($month == 06)
        {
            $month = "June";
        }
    elseif ($month == 07)
        {
            $month = "July";
        }
    elseif ($month == 08)
        {
            $month = "August";
        }
    elseif ($month == 09)
        {
            $month = "September";
        }
    elseif ($month == 10)
        {
            $month = "October";
        }
    elseif ($month == 11)
        {
            $month = "November";
        }
    elseif ($month == 12)
        {
            $month = "December";
        }
    return $month;
}

$month1 = 04;
datecompare($month1);
echo $month;
?>


Als het goed is, moet hij April echoën, maar dat gebeurt niet. Als ik ipv return $month; echo $month gebruik, dan krijg ik wel tekst in het scherm, maar dat wil ik niet, want ik wil de variabele elders gebruiken. Wie kan mij helpen?

We zijn allemaal vaandeldrager in een optocht van gekwetsten.


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

• Lees eens wat over scopes
• Lees eens wat over arrays ($month = array ('January','February' // etc)
• Lees eens wat over de functiewerking in de voortreffelijke php-manual.

;)

Sundown Circus


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Je bent enorm aan het klungelen met variabele name en scopes. $month wordt binnen de functie voor 2 verschillende dingen gebruikt. De parameter en het resultaat. Maak in eerste instantie 2 variabelen aan hiervoor. Bv month en result. De return geeft aan dat dat resultaat teruggegeven wordt. Jij doet hier echter niks mee. Als je bijvoorbeeld $foo=datecompare($month); doet dan gaat het niet verloren. Die verschillende globals die je in je functies heb staan zijn trouwens nergens voor nodig.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
Btw, in php definieer je integers door het getal zelf te nemen, niet voorgegaan door 0-en. Een octaal getal definieer je met een 0 ervoor (08 en 09 bestaan dus eigenlijk niet), en een hexadecimaal getal met 0x ervoor.
En verder zou een switch/case wel mooier zijn, of de array met maanden.

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
ACM schreef op 29 oktober 2004 @ 20:04:
Btw, in php definieer je integers door het getal zelf te nemen, niet voorgegaan door 0-en. Een octaal getal definieer je met een 0 ervoor (08 en 09 bestaan dus eigenlijk niet), en een hexadecimaal getal met 0x ervoor.
En verder zou een switch/case wel mooier zijn, of de array met maanden.
Of gewoon strftime, met de goede locale.

Daarbij, namen van maanden beginnen in Nederland niet met een hoofdletter.

Acties:
  • 0 Henk 'm!

Verwijderd

Gelukkig hebben we ook nog strftime, mktime en setlocale.

Aangezien de default locale meestal wel iets in het Engels is:
PHP:
1
echo strftime ( '%B', mktime ( 0, 0, 0, 10 ) );

Geeft dus keurig "October".

Acties:
  • 0 Henk 'm!

  • M55
  • Registratie: September 2003
  • Niet online

M55

mischien is een switch case ook een idee, ipv van tig if elseif :D

en bij
PHP:
1
2
3
4
5
6
7
function datecompare(&$month) //bij reference
{

}
....
datecompare($month);
...


en verder kan je idd voor datums iets gebruiken wat hierboven al is gemeld :)

[ Voor 68% gewijzigd door M55 op 29-10-2004 20:17 ]


Acties:
  • 0 Henk 'm!

Verwijderd

M55 schreef op 29 oktober 2004 @ 20:14:
mischien is een switch case ook een idee, ipv van tig if elseif :D

en bij
PHP:
1
2
3
4
5
6
7
function datecompare(&$month) //bij reference
{

}
....
datecompare($month);
...


en verder kan je idd voor datums iets gebruiken wat hierboven al is gemeld :)
Dat zou ik dus niet doen. Pass-by-reference is nuttig als (1) je objecten of grote datastructuren doorgeeft, of als (2) je meer dan 1 return value uit je functie wil laten komen, en je taal daar geen voorzieningen voor heeft.

Dat is allebei niet van toepassing. Ik zou er gewoon een functie van maken. Dat heeft nog als toegevoegd voordeel dat je de functie in expressies kan gebruiken, in plaats van slechts als statement.
Pagina: 1