webForumDet fria alternativet

Varför är funktion så fint?

PHP

12 svar · 512 visningar · startad av dr_damir

Medlem sedan mars 2003132 inlägg
Frågan#1

Tjena!

Jag har en fråga gällande klasser och funktioner.
Sitter här med min polare och har dels kopierat ett pagingscript från http://www.phpnoise.com/tutorials/9/1 också har vi gjort ett själva med vanliga variabler osv.. Alltså utan att använda funktioner och classer.
Jag måste erkänna att jag inte kan så mkt om det men jag förstår heller inte varför det är så bra att använda funktioner?

Ok att man kan återanvända koden men man kan ju även klippa och klistra. Någon som har några bra svar eller artiklar?

tja!

Medlem sedan feb. 200112 078 inlägg
#2

Meningen med funktioner är ju att du bara skall behöva ha koden för att göra en/flera specifika saker på ett ställe. Om du publicerar denna kod, måste du ju ändra överallt där den finns.

Givetvis skall funktionen i sig inte heller dupliceras, då förlorar den ju lite av sitt värde, det är därför man har t.ex. klasser eller kanske t.o.m. något så enkelt som en inkluderingsfil som håller funktionerna.

Om du t.ex. har en funktion för att kolla ifall en användare är inloggad, inte bör man väl kopiera denna funktion till varje sida? Nej, den skall finnas tillgänglig genom ett bibliotek när du väl behöver den, och för att göra saker enkla kan man säga att det är smidigast att göra det genom att ha funktionen i en fil som inkluderas på alla sidor där du vill använda den.

Medlem sedan sep. 20021 655 inlägg
#3

Genom att vägra använda klasser eller vanliga funktioner gör du koden många gånger svårare att överblicka.

Istället för

mysql_select_db("abc");
$response = mysql_query("SELECT en jädra massa");
while($row = mysql_fetch_array($response) {
   echo "this";
   echo "that";
}

Skriver du

echo anslut_till_databasen_och_hämta_rader_och_skriv_ut_dem()

Kanske lite dåligt exempel, men generellt är kodupprepning, som man motverkar genom att kapsla in kod i funktioner eller klasser, väldigt dåligt.
Och att kunna förstå koden man skriver är otroligt viktigt. Visst, du förstår kanske det du skriver nu, men om du ska in och göra ändringar om några månader kan det bli besvärligt att komma på hur katten man tänkte när man skrev skriptet.
Genom att kapsla in delarna i funktioner delar du upp det hela i mindre bitar, som var för sig är ganska lätt att förstå.

Medlem sedan okt. 20001 285 inlägg
#4

Här kommer mina 2 cent

Jag har aldrig använt klasser, bara funktioner och har klarat mig utmärkt. Tycker en klass är som en include sida med funktioner ? har jag missat nåt ?

Medlem sedan feb. 200112 078 inlägg
#5

En klass är i regel ett objekt, som har olika metoder/egenskaper.

class Users {
   .GetUser ( id )
   .GetUsers
   .SaveUser ( username, userpassw, userfullname )
   .DeleteUser ( id )
}
Medlem sedan sep. 20021 655 inlägg
#6

OveRRidE skrev:

En klass är i regel ett objekt, som har olika metoder/egenskaper.

Fast en klass är inte ett objekt, utan talar om hur en viss typ av objekt ska fungera.

Medlem sedan okt. 20001 285 inlägg
#7

Nu kan jag absolut INGET om klasser men gissar att denna klass kör funktionerna : GetUser, GetUsers, SaveUser & DeleteUser ?

om så är fallet.. funkar
<?
GetUser(id);
GetUsers();
SaveUser(blah,jooo,hmmm);
DeleteUser(id);
?>
Likadant ?

Medlem sedan feb. 200112 078 inlägg
#8

dectgap skrev:

OveRRidE skrev:

En klass är i regel ett objekt, som har olika metoder/egenskaper.

Fast en klass är inte ett objekt, utan talar om hur en viss typ av objekt ska fungera.

Sant. Fast det är ordtuggeri på den här nivån.

Medlem sedan juni 20015 009 inlägg
#9

Ett exempel (php5) med klasser:

<?php
class test
{
     private test;
     public test2;

     public minfunktion() 
     {
          $this->minandrafunktion(); // Fungerar då det är inne i klassen.
     }
     private minandrafunktion {}
}

$testobjekt = new test();
echo $testobjekt->test; // Fungerar inte, variabeln ej publik
echo $testobjekt->test2; // Fungerar, variabeln publik

$testobjekt->minfunktion(); // Fungerar
$testobjekt->minandrafunktion(); // Fungerar ej
?>

:)

Medlem sedan mars 20034 471 inlägg
#10

Ang. vad man har funktioner till:

Ett väl så viktigt skäl är att du bara har ett ställe att ändra på. Antag att du använder dig av smilies på fem sidor i din site. Varje gång du vill omvandla ev smilietecken i texten till bilder så skriver du: (Använder Peddas svar angående smilisar i exemplet.)

 
$text = str_replace("x(", "<IMG SRC=\"bilder/smilies/angry.gif\">", $text);
$text = str_replace("§e", "<IMG SRC=\"bilder/smilies/devilgrin.gif\">", $text);
$text = str_replace(":bire", "<IMG SRC=\"bilder/smilies/bire.gif\">", $text);
$text = str_replace(":f", "<IMG SRC=\"bilder/smilies/flirt.gif\">", $text);
$text = str_replace(":q", "<IMG SRC=\"bilder/smilies/quest.gif\">", $text);
$text = str_replace(":o", "<IMG SRC=\"bilder/smilies/redface.gif\">", $text);
$text = str_replace(":r", "<IMG SRC=\"bilder/smilies/shame.gif\">", $text);
$text = str_replace(":D", "<IMG SRC=\"bilder/smilies/biggrin.gif\">", $text);
$text = str_replace(";)", "<IMG SRC=\"bilder/smilies/wink.gif\">", $text);
$text = str_replace(":P", "<IMG SRC=\"bilder/smilies/blah.gif\">", $text);
$text = str_replace(":i", "<IMG SRC=\"bilder/smilies/idea.gif\">", $text);
$text = str_replace(":birp", "<IMG SRC=\"bilder/smilies/beergrin.gif\">", $text);
$text = str_replace(":(", "<IMG SRC=\"bilder/smilies/frown.gif\">", $text);
$text = str_replace(":)", "<IMG SRC=\"bilder/smilies/smile.gif\">", $text);
$text = str_replace(":x", "<IMG SRC=\"bilder/smilies/dead.gif\">", $text);
$text = str_replace(":h", "<IMG SRC=\"bilder/smilies/cool.gif\">", $text);
$text = str_replace(":stud", "<IMG SRC=\"bilder/smilies/stud.gif\">", $text);
$text = str_replace(":p", "<IMG SRC=\"bilder/smilies/tongue.gif\">", $text);
$text = str_replace(":l", "<IMG SRC=\"bilder/smilies/hrmpf.gif\">", $text);
$text = str_replace("§jr", "<IMG SRC=\"bilder/smilies/devel.gif\">", $text);
$text = str_replace(":e", "<IMG SRC=\"bilder/smilies/biggrin.gif\">", $text);
echo $text;

Varje gång du har en textmassa som kan innehålla smilies så skriver du hela rubbet ovan. Då har du denna textmassa instucken i annan kod lite här och där på minst 5 ställen (minst en gång per sida med smilisar). Koden blir fruktansvärt svårläst och vad tror du händer om du måste ändra sökväg till smilisarrna? Då måste du in och hitta vartenda ställe där du använt kodsnutten och ändra överallt.

Om du istället tar och stoppar in koden ovan i en funktion smile:

function smile ($text) {
//koden ovan
}

och lagrar funktionen i filen funcs.php, så kan du inkludera funcs.php i de fem filer som använder smilies och skriva

echo smile('Min text med \:) smilisar i \:e');

Dels är detta betydligt lättare att läsa, dels behöver du bara ändra i smile, dvs på ett ställe om sökvägen ändras.

Att upprepa kod är aldrig någon höjdare... Risken att man glömmer uppdatera åtminstone någonstans är överhängande. Särskilt om man gör uppdateringen säg efter en vecka eller längre sedan man senast tittade på koden.

I funktioner kapslar man in kod till ett namngivet "block" som kan användas om och om igen. I klasser (kan) man kapsla in både funktioner och variabler som hör ihop med ett visst koncept.

RED: Förtydligande

Medlem sedan juni 20008 205 inlägg
#11

OveRRidE skrev:

dectgap skrev:

OveRRidE skrev:

En klass är i regel ett objekt, som har olika metoder/egenskaper.

Fast en klass är inte ett objekt, utan talar om hur en viss typ av objekt ska fungera.

Sant. Fast det är ordtuggeri på den här nivån.

Inte nödvändigtvis, om vi ska vara petnoga... klasser är faktiskt objekt i många implementationer av OO (t.ex. Java och Dotnet, dock osäker på hur det är just i PHP), objekt som råkar ha den speciella funktionen att de beskriver formen för andra objekt :)

Medlem sedan jan. 20023 327 inlägg
#12

En klass beskriver objektet, av en klass kan du skapa objektinstanser. :)

Medlem sedan feb. 200112 078 inlägg
#13

spango skrev:

OveRRidE skrev:

dectgap skrev:

Fast en klass är inte ett objekt, utan talar om hur en viss typ av objekt ska fungera.

Sant. Fast det är ordtuggeri på den här nivån.

Inte nödvändigtvis, om vi ska vara petnoga... klasser är faktiskt objekt i många implementationer av OO (t.ex. Java och Dotnet, dock osäker på hur det är just i PHP), objekt som råkar ha den speciella funktionen att de beskriver formen för andra objekt :)

Det jag försökte säga var att det känns onödigt att börja klyva OOP-hår här, eftersom trådskaparen antagligen inte har kommit till den nivån ännu. Men som jag sa, det är korrekt.

370 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
239 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
239 ms — ändringar (db)