Brugernavn:




Kodeord: Husk
Forside Forum Artikler Downloads Søg
 

PHP fifs


Forord:

Inden jeg går i gang, kommer der – som der vist plejer – lidt forord.

Det, jeg prøver at nå med denne artikel er, at lære nybegyndere såvel som mere erfarne kodere nogle nye teknikker og metoder, der måske vil være til hjælp, næste gang du skal i gang med en applikation. Dette skriver jeg, fordi eksemplerne i min artikel kun vil være eksempler, de vil rettere sagt være ubrugelige. Så undlad venligst at skrive kommentarer som ”Fin artikel, men hvad skal jeg bruge det til?”, for artikler handler jo ikke om hvad du skal brugere ting til, det hedder en anmeldelse, derimod handler det om at du lærer noget.

Det er vigtigt, at du før har arbejdet med funktioner og løkker før. Hvis ikke vil jeg kraftigt råde dig til at læse nogle artikler og lege lidt med det, inden du fortsætter med denne artikel. Det gør heller ikke noget, hvis du har et nogenlunde kendskab til PHP generelt, da jeg af visse grunde ikke gennemgår det helt basale, som for eksempel hvad PHP’s ++ operator gør.

Indhold:

- Funktioner
- Løkker
- IF-sætninger
- Syntaks
- Datatyper
- print frem for echo

Funktioner:

Jeg kan starte med at sige, at når jeg går i gang med en ny applikation i PHP, starter jeg altid med at lave en række funktioner, som jeg ved, jeg kommer til at få brug for senere. Det sparer mig for en masse arbejde, og ved at lægge funktionerne i en ekstern fil for senere at inkludere den slipper jeg også for at oprette den samme funktion en masse gange. En måde at bygge det op på, er ved at lave et såkaldt ”funktionsbibliotek”. I starten forstod jeg ikke meningen af det ord, og arbejdede bare videre som jeg altid har gjort, men det er faktisk en utrolig smart ting, som også bruges i ”rigtige” programmeringssprog som Delphi (uses) og C++ (#include). Et eksempel:

bibliotek.php:
  1. <?

  2. function f1($argumenter)
  3. {
  4.    # Gør noget bestemt
  5. }

  6. function f2($argumenter)
  7. {
  8.    # Gør noget andet
  9. }

  10. function f3($argumenter)
  11. {
  12.    f1(); # Gør noget bestemt …
  13.    f2(); # Ved at gøre noget andet …
  14. }

  15. ?>
I funktionen f1() kunne vi for eksempel kontakte en database. Allerede der ville vi have sparet et arbejde af dimensioner. Ved at inkludere bibliotek.php i vores andre filer samt skrive ”f1()” ville vi have kontaktet vores database. Vi behøver selvfølgelig ikke oprette en funktion for at gøre dette, vi kunne for eksempel bare have lavet en fil, der hed database.php og inkluderet den, men som sagt er det her kun eksempler for hvad du bør gøre, og hvad du ikke bør gøre.

Til dem, der ikke fulgte mit råd om at læse lidt om funktioner først, er her en forklaring af dem:
En funktion består af 5+ dele: Den identifier, som angiver vi vil oprette en funktion: function. Dernæst kommer navnet på funktionen, for eksempel ”f3”, en række parametre som funktionen kan behandle, et sæt tuborgklammer for at indeksere funktionens kommandoer, og til sidst en (engelsk) ”return value”, altså de data man får, efter funktionen har udført sine kommandoer.

Et eksempel på en funktion kunne derfor se sådan her ud:
  1. <?
  2. function  sum($tal1, $tal2)
  3. {
  4.    return $tal1+$tal2;
  5. }
  6. ?>

Og hvis vi lige vil teste vores funktion:
  • print sum(2, 3); # Giver 6 … Nej 5 ;)

Det kan også tit blive nødvendigt at bruge andre objekter – for eksempel en løkke – i en funktion. For at give et sjovt og lærerigt eksempel på det her, vil vi lave en funktion, magen til PHP’s indbyggede strRev() ( http://dk2.php.net/strrev ) funktion. Jeg forklarer funktionen bagefter, men prøv først selv at se om ikke du kan regne den ud selv.

  1. <?
  2. function Reverse($string)
  3. {
  4.    $length = strlen($string);
  5.    while ($length >= 0)
  6.    {
  7.       @$reversed .= $string[$length];
  8.       $length--;
  9.    }
  10.    return $reversed;
  11. }
  12. print Reverse(’Thomas’);
  13. ?>

Altså: Først oprettes en funktion, som jeg har valgt at kalde ”Reverse”, fordi den vender værdien af parameteren $string om. Med strlen($string) får vi længden ud af $string. Så løber vi bogstav for bogstav igennem med en while, og tilføjer det aktuelle bogstav til den variabel ($reversed), vi vil returnere (return). Bogstavet finder vi frem ved at skrive $string[$length]. Dette gør vi, fordi:
  1. $navn = ”rowl”;
  2. print $navn[1]; # … giver ”o”, fordi ”o” er det andet tegn i $navn (PHP starter ved 0)
Efter at have fundet det nuværende bogstav frem, trækker vi 1 fra $length. Hvis $string er lig ”rowl”, og $length er lig 2, vil vi nu få et ”o” frem, fordi 2 minus 1 som bekendt giver 1, og $string[1] == ”o”. Kan I følge mig?

Løkker:

Løkker er ligeså virksomme som funktioner. Forskellen er, at løkker kører en kommando x antal gange, hvor en funktion kun kører den 1 gang. Du kan selvfølgelig putte en løkke ind i en funktion, som jeg også gav et eksempel på før, men løkken vil stadig kun blive kørt en gang (medmindre du putter den ind i en anden løkke, men sådan kan vi jo blive ved ;)).

Hvis du skal lave noget bestemt HTML output på en side, men som du ved, du ikke får brug for på andre sider, kan du snildt bruge en løkke her. Følgende kode vil for eksempel give os en <select>, med <option>’s helt fra 1930 til 2006:
  1. <?
  2. $start_aar = 1930;
  3. $slut_arr = 2006;
  4. print ’<select>’;
  5. while ($start_arr++ <= $slut_arr)
  6.    print ’<option>$start_arr</option>’;
  7. print ’</select>’;
  8. ?>
Jeg ville egentlig have gemt det her til syntaks punktet af artiklen, men jeg kan ligeså godt tage det med inden jeg glemmer det. Jeg bruger ikke tuborgklammer ( { og } ), fordi løkken kun udfører en komando; nemlig at skrive ’<option>$start_arr</option>’. Så længe du kun skal have en kommando udført, behøver du ikke tuborgklammerne. Men hvis du vil udføre flere kommandoer skal de være der, så løkken ved hvilke kommandoer den ”ejer”, altså som den skal udføre. Det samme gælder en IF-sætning, men ikke klasser og funktioner.

Jeg giver lige et til eksempel med en løkke, inden jeg går videre. Denne gang forklarer jeg dog ikke hvad der sker, det er op til dig selv at finde ud af, og hvis ikke du kan det må du jo teste resultatet på en PHP-understøttende server ;).
  1. <?
  2. $ord = "Kaffekop";
  3. for ($i = 1, $laengde = strLen($ord); $i < $laengde; $i++)
  4.   print substr($ord, 0, $i)."<br>";
  5. for ($i = strLen($ord); $i > 0; $i--)
  6.   print substr($ord, 0, $i)."<br>";
  7. ?>

IF-sætninger:

Dem har jeg til gengæld ikke så meget at sige om, for de er ikke ligeså komplekse som det vi tidligere har gennemgået. Men hvis du bare lige hurtigt skal tjekke en variabel eller 2, er der en måde hvorpå du kan slippe for en masse bøvl med at skrive if ([betingelse]) { … } elseif ([anden betingelse]) { … } else { … }. Den ser sådan her ud:
  1. <?
  2. $navn = "Pizza";
  3. $pizza = ($navn == "Pizza") ? "Ja" : "Nej";
  4. print $pizza;
  5. ?>
Først laver vi variabel $navn som indeholder ”pizza”.
Dernæst laver vi variablen $pizza. Den giver vi en valgmulighed. Hvis det, der står i parenteserne er sandt, vil $pizza være lig ”Ja”. Ellers bliver det et ”Nej”. Denne syntaks er lidt svær at beskrive fordi den er så uregelmæssig, men det er præcis det samme som det her:
  1. <?
  2. $navn = "Pizza";
  3. if (($navn == "Pizza") == true)
  4.   $pizza = "Ja";
  5. else
  6.   $pizza = "Nej";
  7. print $pizza;
  8. ?>
Du skal simpelthen bare erstatte ? med ”det her sker hvis $navn er lig Pizza” og : med ”Der her sker hvis $navn ikke er lig Pizza”.

Og sidst: Du behøver ikke parenteserne, jeg har kun lavet dem for at gøre det mere overskueligt.

Syntaks:

Jeg kender ikke nogle programmeringssprog, der har sin egen, faste syntaks. Og hvis jeg gjorde ville jeg holde mig langt væk fra det sprog. Syntaksen i en kode er en meget vigtig ting, men det vigtigste er selv at kunne bestemme hvordan den skal se ud.

I mine eksempler har I set lidt af det, men man kunne også skrive tingene sådan her:
  1. <?
  2. function f1($navn){echo"Hej $navn";;;;;;;}f1("Thomas");
  3. ?>
Men det bliver hurtigt meget uoverskueligt. Man bestemmer altså selv sin syntaks, om end nogle er bedre end andre. Men det er ikke den eneste form for syntaks. PHP tilbyder også andre syntakser, for eksempel for løkker.

Et eksempel:
  1. <?
  2. while (empty($hej)):
  3.   print "Hej";
  4.   $hej = "Hej";
  5. endwhile;
  6. ?>

I stedet for at bruge den klamme, der starter en indeksering ( { ), bruger vi et kolon ( : ), og i stedet for at bruge den klamme, der slutter en indeksering ( } ), bruger vi en ny identifier, nemlig endwhile (og ja, havde vi brugt en løkke som for havde vi i stedet skrevet endfor). Det samme kan du også gøre med IF-sætninger, men (igen) ikke med klasser og funktioner.

Datatyper:

Når du arbejder med data i PHP, arbejder du mere eller mindre ubevidst om hvad type dine data er af. Selv tænker jeg ikke over det, medmindre jeg skal tjekke om for eksempel en variabel indeholder et tal eller en streng. Det kan gøres på flere måder, men af dem er således:
  1. <?
  2. $tal = "5"; # $tal indeholder en streng, fordi vi omgiver 5 med " "
  3. print ($tal === (int) $tal) ? "$tal indeholder et tal" : "$tal indeholder en streng";
  4. ?>
Selv synes jeg dette er en genial måde at tjekke om det er et tal eller en streng man har med at gøre. Langt bedre end funktion is_numeric, men det er nok fordi, den arbejder på en anden måde end jeg vil.

Det vi gør, er at vi lægger en streng ind i variablen $tal. Bagefter laver vi en IF-sætning med den syntaks, jeg forklarede lidt om før. Hvis $tal er identisk (3 x ’=’) med en ”tal udgave” (int står får ”integer” som betyder ”tal”), skriver vi ”$tal indeholder et tal”, ellers skriver vi ”$tal indeholder en streng”. PHP har dog allerede en lignende funktion, og den hedder getType(), så dette var blot endnu et eksempel på at lave en nyttig funktion.

Til dem, der ikke har set operatoren ’===’ før: Det er en sammenligningsoperator, ligesom ’==’, men forskellen er, at ’===’ tjekker både værdi og type, hvor ’==’ kun tjekker værdien. ’===’. Uden at være helt sikker, men jeg ’===’ kom med siden PHP 4.2.0.

print frem for echo

Jeg synes, der er flere grunde til at bruge print frem for echo. For der er nemlig en del forskellige på de to. I manual sammenhæng ser de to nemlig sådan ud:
  1. void echo([mixed…]);
  2. int print([mixed…]);
Hvis du bare skal udskrive noget på skærmen er det lidt ligegyldigt hvilken en du bruger, men hvis du for alt i verden vil have en return value, skal du bruge print. Den returnerer nemlig 1 (true) hvis det lykkedes den at skrive noget, ellers returnerer den 0 (false):
  1. <?
  2. echo @(print $var) === true ? "Print udskrev noget på skærmen" : "Print udskrev ikke noget på skærmen";
  3. ?>
Følgende vil skrive ’Print udskrev ikke noget på skærmen’, fordi variablen $var ikke er oprettet.

En anden ting er..
  1. <?
  2. # Du kan gøre sådan her:
  3. echo print "Hej";
  4. # Og sådan her:
  5. $var = print "Hej";

  6. # Men ikke sådan her:
  7. print echo "Hej";
  8. # Eller sådan her:
  9. $var = echo "Hej";
  10. ?>
Hvis jeg kort skulle forklare det med mine egne ord, så ville jeg sige print er en funktion, mens echo er en såkaldt ”contruct”. De er faktisk begge af typen ”contruct”, men print opfører sig mere som en funktion, fordi den returnerer en værdi, hvor echo bare bruges til at udskrive noget på skærmen.

Det kan diskuteres hvor relevant det er, om man bruger print eller echo, for i princippet er det jo op til dig selv, jeg tænkte bare lige jeg ville tage den med, fordi der faktisk er mange der ikke kender til forskellen.

Endnu engang har jeg dog dummet mig, og skrevet artiklen om natten, hvor jeg naturligt er mere træt og derfor mindre koncentreret, hvilket resulterede i, jeg ikke fik uddybet de forskellige ting så meget som jeg egentlig godt ville, men på trods af det er den blevet temmelig lang.

Hav en velsignet skolestart ;)
Sidst redigeret 18:59 - 13/08/2006
Oprettet af:

PHP

Point modtaget: 0

Rate:
02:23 13/08/2006

Kommentarer

Giv din mening tilkende om denne artikel, eller læs andres.
Har du spørgsmål eller brug for hjælp til denne artikel henvises du til forummet.
Du forklare det godt...
Oprettet af:
  Mail
13:37 15/04/2007
Thumps Up ;D

Har læst artiklen senere hen igen, synes virkelig det er godt arbejde ;D
Oprettet af:
  Mail
23:35 07/08/2007
v0id, der er jo forskel på PHP og C; ' ' laver kun en char i C(++). I PHP er der slet ikke nogen char-type. Den laver også en streng, om end den har færre muligheder en ""-strengen.
Sidst redigeret 23:30 08/01/2008
Oprettet af:
  Mail
23:29 08/01/2008
Du skal være oprettet og logget ind for at kommentere en artikel
Copyright © Rowl.dk v/ Michael Raagaard | 2005-12 | Alle rettigheder forbeholdes