Avatar billede ofirpeter Nybegynder
05. juli 2006 - 21:01 Der er 21 kommentarer og
1 løsning

Funktioner i php

Hej,
Jeg har lige kastet mig ud i at bruge funktioner i PHP. Det har givet mange gode oplevelser, da det gør koden meget mere overskuelig.

Dog er der en ting jeg ikke kan hitte ud af, og det har ikke hjælpe at google emner, selvom man skulle tro der fandtes rigeligt stof om det.

Variablerne i disse funktioner irretere mig lidt, da jeg ikke kan trække variabler med ud af funktionen. Er der som i Java en måde hvorpå jeg kan få variablerne med mig?
Avatar billede iss Novice
05. juli 2006 - 21:02 #1
Kig efter return...
Avatar billede jaw Nybegynder
05. juli 2006 - 21:05 #2
Nu er jeg ikke javascript-ekspert, men som iss siger:

funtion test() {
  $variabel = "noget";
  return $variabel;
}

$ny_variabel = test();
echo $ny_variabel;

Så får du $variabel fra funktionen med dig ud. Dog kan du kun få 1 ad gangen.
Avatar billede ofirpeter Nybegynder
05. juli 2006 - 21:07 #3
Jeg fandt også denne side, som gav mig syn for sagen: http://www.phpartikler.dk/artikler/begynder3.php

Svar gerne
Avatar billede jaw Nybegynder
05. juli 2006 - 21:11 #4
Nej tak, du klarede det jo sådan set selv, og jeg uddybede blot iss'.
Avatar billede kinderaeg Nybegynder
06. juli 2006 - 11:20 #5
Hvis du vil sende parametre med "by reference", kan du sætte et & foran variablen, som vist nedenstående, så ændrer variablen sig også unden for scope, hvis du ændrer den i funktionen.

function by_reference(&$string) {
...
}
Avatar billede ofirpeter Nybegynder
25. juli 2006 - 16:42 #6
Jaw og kinderaeg i må meget gerne svare.
Avatar billede ofirpeter Nybegynder
31. juli 2006 - 12:19 #7
Jeg gentager lige :)
- Jaw og kinderaeg i må meget gerne svare.
Avatar billede Slettet bruger
31. juli 2006 - 12:22 #8
jamen kinderaeg> hvad vil det sige "by reference" ? (& foran $variabel i funktioner osv.)
Avatar billede pidgeot Nybegynder
31. juli 2006 - 12:27 #9
Det betyder at du i stedet for at sende værdien med, sender selve variablen - så det du ændrer på den inde i funktionen, også er ændret når du kommer ud af den igen, uden at du skal gøre noget for den.

Det sparer på hukommelsen hvis det er en stor værdi vi har med at gøre (såsom en lang tekst-streng), og er også meget nyttigt som et alternativt til return, eller en metode til at returnere mere end en variabel uden at skulle bruge et array.
Avatar billede iss Novice
31. juli 2006 - 12:28 #10
function by_reference(&$string) {
$string = "Dette er din string: ".$string;
}
echo by_reference("test");
Avatar billede Slettet bruger
31. juli 2006 - 12:31 #11
Jeg forstår det sådan ca., men kan ikke se eksempelt viser det ordenligt. (?)
Avatar billede pidgeot Nybegynder
31. juli 2006 - 12:31 #12
..lige den der er så ubrugelig, da du ikke kan bruge din ændring til noget, og du intet har at echo'e (så skulle der jo returnes).

function by_reference(&$string) {
$string = "Dette er din string: ".$string;
}
$str="test";
by_reference($str);
echo $str;
Avatar billede iss Novice
31. juli 2006 - 12:32 #13
Mente:
function by_reference(&$string) {
$string = "Dette er din string: ".$string;
}
$string2 = "test";
by_reference($string2);
echo $string2;
Avatar billede Slettet bruger
31. juli 2006 - 18:11 #14
Nu er jeg da først helt 'lost' ;)
Men det vil sige den kan retuner noget og samtidg ændre en variabel??
Avatar billede iss Novice
31. juli 2006 - 18:21 #15
Den returnere intet, den laver bare det om på den variabel men nu en gang gør på den inden i funktionen.
Avatar billede Slettet bruger
31. juli 2006 - 19:32 #16
Det vil sige jeg hatr en variable uden for funktionen jeg kan sætte lige med en værdig ect, i min funktion?

$year = 2006;
test($year);

function test(&$string) {
  $year += 1;
}
Avatar billede Slettet bruger
31. juli 2006 - 19:32 #17
Så skulle $year blive til 2007 f.eks. ikke?
Men hvad er den stor fordel ved at gøre med by reference?
Avatar billede pidgeot Nybegynder
31. juli 2006 - 19:40 #18
Korrekt. Fordelen er at du sparer på hukommelsen (da den ikke skal kopiere indholdet) - det kan godt være vigtigt i visse tilfælde - samt at du indirekte kan returnere mere end en variabel uden at skulle til at returnere et array og flytte variablerne ud.

Det vil sige at du eksempelvis kunne lave en funktion der ser sådan ud:

function removeelement(&$arr,$index)
{
  $result=$arr[$index];
  unset($arr[$index]);
  return $result;
}

der, når den kaldes, fjerner et element fra et array og returnerer det. Eksempel på hvordan det virker:

$arr = array('one'=>1,'two'=>2,'three'=>3);
echo removeelement($arr,'two')."\n";
print_r($arr);

Dette vil udskrive:
2
Array
(
    [one] => 1
    [three] => 3
)
Avatar billede iss Novice
31. juli 2006 - 19:43 #19
Der er flere fordele, især hvis du vil have en funktion der skal kunne gøre flere ting på en gang
function test(&$startyear, &$endyear) {
  $startyear += 10;
  $endyear += 10;
  $diff = $endyear - $startyear
  return $diff;
}
Den giver dig tre forskellige nye værdier...

Og du mener:
function addOneYear(&$year) {
  $year += 1;
}
Avatar billede Slettet bruger
31. juli 2006 - 20:50 #20
takker...
Avatar billede kinderaeg Nybegynder
01. august 2006 - 09:27 #21
Svar
Avatar billede ofirpeter Nybegynder
01. august 2006 - 14:26 #22
Tak for svar.
(Lukker da Jaw ønsker ikke point:Kommentar: jaw 05/07-2006 21:11:31)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester