/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Returnér fra rekursiv funktion
Fra : Jakob Kirkegaard


Dato : 29-08-01 17:02

Hvorfor giver følgende script ikke noget output - er det nødvendigt at
"svine" det globale scope til for at klar problemet? - eller er der
andre smartere metoder.

function recursive ($i) {
static $gfx = "";
if ($i > 0) {
$gfx.= "string1";
recursive($i-1);
} else {
return $gfx;
}
}

$var = recursive(5);
echo $var;

--
mvh Jakob Kirkegaard

 
 
Thor Dreier (29-08-2001)
Kommentar
Fra : Thor Dreier


Dato : 29-08-01 17:28

"Jakob Kirkegaard" <jkir00@kom.auc.dk> wrote in message
news:9mj3pj$29l$1@sunsite.dk...
> function recursive ($i) {
> static $gfx = "";
> if ($i > 0) {
> $gfx.= "string1";
> recursive($i-1);
> } else {
> return $gfx;
> }
> }

Hvad er det helt præcis du vil have ud af denne funktion? Den vil kun
returnere noget hvis du kalder den med 0 (og det er kun en tom streng).


--
http://dreier.nu/
Det er bedre at være destruktiv på en konstruktiv måde,
end at være konstruktiv på en destruktiv måde.
- eller også er det omvendt?



Jakob Kirkegaard (29-08-2001)
Kommentar
Fra : Jakob Kirkegaard


Dato : 29-08-01 17:33

Wednesday 29 August 2001 18:28 skrev Thor Dreier:

> "Jakob Kirkegaard" <jkir00@kom.auc.dk> wrote in message
> news:9mj3pj$29l$1@sunsite.dk...
>> function recursive ($i) {
>> static $gfx = "";
>> if ($i > 0) {
>> $gfx.= "string1";
>> recursive($i-1);
>> } else {
>> return $gfx;
>> }
>> }
>
> Hvad er det helt præcis du vil have ud af denne funktion? Den vil kun
> returnere noget hvis du kalder den med 0 (og det er kun en tom
> streng).

Nej - det skulle den helst ikke (og går såvidt jeg kan se heller ikke)
- hvis du eks. kalder den med
recursive(3) skulle den gerne output'e string1string1string1.
Funktionen er rekursiv og virker fint nok hvis jeg erstatter return med
echo - men jeg vil gerne have tildelt $gfx til en variable, uden at
bruge det globale scope.

--
mvh Jakob Kirkegaard

Jacob Bunk Nielsen (29-08-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 29-08-01 17:38

Jakob Kirkegaard <jkir00@kom.auc.dk> writes:

> recursive(3) skulle den gerne output'e string1string1string1.

Vupti, lige en ting jeg glemte i min forrige post ... din funktion
skal nok se ud som noget i retning af:

function recursive($i) {
if ($i <= 0) {
return "string1";
}
else {
return recursive($i-1) . "string1";
}
}

Glem lige hvad jeg skrev om ekstra argumenter, det er en anden måde at
gøre det på, men ovenstående er mere elegant

--
Jacob - www.bunk.cc
You do not have mail.

Jakob Kirkegaard (29-08-2001)
Kommentar
Fra : Jakob Kirkegaard


Dato : 29-08-01 17:51

Wednesday 29 August 2001 18:37 skrev Jacob Bunk Nielsen:

> Jakob Kirkegaard <jkir00@kom.auc.dk> writes:
> Vupti, lige en ting jeg glemte i min forrige post ... din funktion
> skal nok se ud som noget i retning af:
....
> Glem lige hvad jeg skrev om ekstra argumenter, det er en anden måde at
> gøre det på, men ovenstående er mere elegant

Jep - det er måden er gøre det på - takker!

--
mvh Jakob Kirkegaard

Thor Dreier (29-08-2001)
Kommentar
Fra : Thor Dreier


Dato : 29-08-01 17:42

"Jakob Kirkegaard" <jkir00@kom.auc.dk> wrote in message
news:9mj5ih$53b$1@sunsite.dk...
> >> function recursive ($i) {
> >> static $gfx = "";
> >> if ($i > 0) {
> >> $gfx.= "string1";
> >> recursive($i-1);
> >> } else {
> >> return $gfx;
> >> }
> >> }
> > Hvad er det helt præcis du vil have ud af denne funktion? Den vil kun
> > returnere noget hvis du kalder den med 0 (og det er kun en tom
> > streng).
> Nej - det skulle den helst ikke (og går såvidt jeg kan se heller ikke)
> - hvis du eks. kalder den med
> recursive(3) skulle den gerne output'e string1string1string1.
> Funktionen er rekursiv og virker fint nok hvis jeg erstatter return med
> echo - men jeg vil gerne have tildelt $gfx til en variable, uden at
> bruge det globale scope.

Følgende er utestet. Ved at kalde den med recursive(3) skulle den returnere
string1string1string1

function recursive ($i) {
$gfx = "string1";
if ($i > 0) {
return $gfx . recursive($i-1);
} else {
return $gfx;
}
}


--
http://dreier.nu/
Med denne udtalelse repræsenterer jeg på ingen måde mig selv,
og kan derfor under ingen omstændigheder holdes ansvarlig for
skader forårsaget af, eller som følge af denne udtalelse.



Thor Dreier (29-08-2001)
Kommentar
Fra : Thor Dreier


Dato : 29-08-01 17:47

"Thor Dreier" <news@cheater.dk> wrote in message
news:YW8j7.26625$Ay1.734487@news000.worldonline.dk...
> Følgende er utestet. Ved at kalde den med recursive(3) skulle den
returnere
> string1string1string1
> function recursive ($i) {
> $gfx = "string1";
> if ($i > 0) {
> return $gfx . recursive($i-1);
> } else {
> return $gfx;
> }
> }

Rettelse, hvis man kalder den med recursive(3), så vil den skrive
string1string1string1string1 (altså 4 gange). Skal det kun skrives 3 gange,
så ret 0'et til et 1-tal.



Jacob Bunk Nielsen (29-08-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 29-08-01 17:34

Jakob Kirkegaard <jkir00@kom.auc.dk> writes:

> Hvorfor giver følgende script ikke noget output - er det nødvendigt at
> "svine" det globale scope til for at klar problemet?

Nej, giv den et argument mere med. Så bliver din funktionssignatur:

int * string -> string

.... eller på PHP'sk:

function recursive($i, $gfx) {
...
return $gfx;
}

Når du kalder funktionen igen får den sit eget scope, det er jo ikke
en løkke, men en rekursion du laver.

> static $gfx = "";

Er static en korrekt modifier i PHP? Normalt bruger man kun static i
forbindelse med OOP, hvor den vist desværre ikke har den forventede
effekt i PHP, som er ret svagt til OOP

--
Jacob - www.bunk.cc
It's not an optical illusion, it just looks that way.

Jakob Kirkegaard (29-08-2001)
Kommentar
Fra : Jakob Kirkegaard


Dato : 29-08-01 17:41

Wednesday 29 August 2001 18:34 skrev Jacob Bunk Nielsen:

> Jakob Kirkegaard <jkir00@kom.auc.dk> writes:
>> static $gfx = "";
> Er static en korrekt modifier i PHP? Normalt bruger man kun static i
> forbindelse med OOP, hvor den vist desværre ikke har den forventede
> effekt i PHP, som er ret svagt til OOP

Nu ved jeg ikke hvad du præcist mener med "korrekt modifier", men svjv
er det vel den eneste måde at variabler beholder deres værdier mellem
fkt. kald uden man erklærer dem globale.

--
mvh Jakob Kirkegaard

Anders Johannsen (29-08-2001)
Kommentar
Fra : Anders Johannsen


Dato : 29-08-01 19:19

In article <m366b6n7uj.fsf@paven.bunk.cc>, "Jacob Bunk Nielsen"
<spam@bunk.cc> wrote:

> Er static en korrekt modifier i PHP? Normalt bruger man kun static i
> forbindelse med OOP, hvor den vist desværre ikke har den forventede
> effekt i PHP, som er ret svagt til OOP

Det er korrekt, for så vidt man ser bort fra anvendelsen af 'static' i
f.eks. C

/A

Jacob Bunk Nielsen (29-08-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 29-08-01 19:45

"Anders Johannsen" <anders@ignition.dk> writes:

> > Er static en korrekt modifier i PHP? Normalt bruger man kun static i
> > forbindelse med OOP, hvor den vist desværre ikke har den forventede
> > effekt i PHP, som er ret svagt til OOP
>
> Det er korrekt, for så vidt man ser bort fra anvendelsen af 'static' i
> f.eks. C

Men virker den så i PHP, som den gør i C? Jeg har ikke selv testet
det, så jeg spørger af ren nysgerrighed, hvis du lige har prøvet det.

.... og virker den både for funktioner og variable?

--
Jacob - www.bunk.cc
It compiles, let's ship it!

Anders Johannsen (29-08-2001)
Kommentar
Fra : Anders Johannsen


Dato : 29-08-01 21:50

In article <m3wv3mln8i.fsf@paven.bunk.cc>, "Jacob Bunk Nielsen"
<spam@bunk.cc> wrote:

> Men virker den så i PHP, som den gør i C? Jeg har ikke selv testet det,
> så jeg spørger af ren nysgerrighed, hvis du lige har prøvet det.

Det har jeg ikke -- jeg bemærkede blot det fejlagtige i at man kun bruger
static i forbindelse med OOP.

Funktionaliten er dokumenteret på

   http://www.php.net/manual/en/language.variables.scope.php

/A

Jacob Bunk Nielsen (29-08-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 29-08-01 22:47

"Anders Johannsen" <anders@ignition.dk> writes:

> > Men virker den så i PHP, som den gør i C? Jeg har ikke selv testet det,
> > så jeg spørger af ren nysgerrighed, hvis du lige har prøvet det.
>
> Det har jeg ikke -- jeg bemærkede blot det fejlagtige i at man kun bruger
> static i forbindelse med OOP.

OK, jeg har primært brugt 'static' i Java, det er helt sikkert deraf
fejlen kommer.

Jeg sidder lige nu og er igang med et større projekt i OO PHP, hvor
jeg for alvor savner rigtig mange af de OO ting jeg kender fra
Java. Jeg læste dog lidt om Zend Engine 2.0 her forleden. Der ser det
ud til at de langt hen ad vejen tager udgangspunkt i netop Javas
objektmodel. Det bliver en stor dag når vi ser den på gaden.

> Funktionaliten er dokumenteret på
>
>    http://www.php.net/manual/en/language.variables.scope.php

Tak, men sikke da et åndsvagt eksempel der er på den side. Hvem i sit
rette sind ville lave en funktion på den måde? I hvert fald ikke en
der har prøvet at kode i et funktionsprogrammeringssprog.

--
Jacob - www.bunk.cc
But I can't upgrade my kernel, I've got some mad uptime!

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste