Mr. Ikke her mer Skrevet 9. november 2010 Del Skrevet 9. november 2010 (endret) Urk folkens! Jeg har et underlig problem jeg ikke helt klarer sette fingeren på. Jeg bruker en phpfunksjon for å hente url til brukeren sitt profilbilde. Min funksjon, litt modifisert, men avføringa er den samme. <?php function profile_image($pid,$type) { if($type == 'thumb') { echo'http://bildeurl.com'; } else { echo'http://bildeurl.com'; } } ?> Mens jeg da henter ut bildet med 1 av de 2 som følger avhengig av akkurat hvor jeg er: <img src="<?php profile_image($userid,'thumb'); ?>"> echo'<img src="'.profile_image($userid,'thumb').'">'; Saken er at der hvor dette funker, da bruker jeg den øverste av de to, mens når jeg bruker den nederste, da kommer bildeurl'en utenfor <img-taggen>. Resultat med den øverste: <img src="http://bildeurl.com"> Resultat med den nederste: http://bildeurl.com<img src=""> Er det noe jeg gjør veldig galt her? Jeg er ikke sikker på hva det kan være. Kun grunnleggende phpkunnskaper finner sted i hodet mitt, så det kan være det er bare en liten fillefeil jeg ikke vet om? På forhånd, takk for evt. svar som kan hjelpe meg til en løsning. Endret 9. november 2010 av seppolaatle Lenke til kommentar
Jonas Skrevet 9. november 2010 Del Skrevet 9. november 2010 I nederste tilfellet må funksjonen returnere verdien for å oppnå oppførselen du forventer. Lenke til kommentar
Mr. Ikke her mer Skrevet 9. november 2010 Forfatter Del Skrevet 9. november 2010 Uhm, kunne du utdypt litt hva du mener? Jeg forstår ikke helt hva du mener med «verdien». Lenke til kommentar
Jonas Skrevet 9. november 2010 Del Skrevet 9. november 2010 <?php function foo () { return 'bar'; } echo '<img src="' . foo () . '" />'; ?> <?php function foo () { echo 'bar'; } ?> <img src="<?php foo (); ?>" /> Jeg lar det stå som en øvelse å finne ut hvorfor det er slik. 1 Lenke til kommentar
Mr. Ikke her mer Skrevet 9. november 2010 Forfatter Del Skrevet 9. november 2010 Hmm, ok. Nei, altså. Det jeg kan finne ut er at det er ganske feil å avslutte en funksjon med echo, og at det faktisk er return man alltid skal bruke i en funksjon. Men akkurat hvorfor det er slik har jeg litt vanskeligheter med å finne ut av... Er jeg helt på jordet her nå? Lenke til kommentar
Thomas. Skrevet 9. november 2010 Del Skrevet 9. november 2010 Return gir funksjonen en verdi, kan du si (må derfor printes ut manuelt). Echo bare printer ut det du setter i echo. echo: <?php function q() { echo 5; } echo (q() == 5) ? 'Funksjonen returnerer 5.' : 'Funksjonen returnerer IKKE 5.'; ?> return: <?php function q() { return 5; } echo (q() == 5) ? 'Funksjonen returnerer 5.' : 'Funksjonen returnerer IKKE 5.'; ?> 1 Lenke til kommentar
Mr. Ikke her mer Skrevet 12. november 2010 Forfatter Del Skrevet 12. november 2010 Setter stor pris på svarene her, men hva legger dere i verdi? Jeg har alltid tenkt på verdi som innholdet av et eller annet, som f.eks $apeloff, men forstår at jeg muligens ikke har tenkt helt riktig hva gjelder nettopp en verdi. Lenke til kommentar
ventrec Skrevet 12. november 2010 Del Skrevet 12. november 2010 Tenk på at du har en funksjon som opererer med tall. Hvis du ønsker å bruke funksjonen videre, uten å skrive ut resultatet så ville det vært dumt å bruke echo i funksjonen. Ved å bruke return så kan du bruke tallet videre i regneoperasjoner og lignende. function sum($a, $b) { return ($a + $b); } echo (2 + sum(3,5)); Her vil man da skrive ut tallet 10. Lenke til kommentar
Terrasque Skrevet 13. november 2010 Del Skrevet 13. november 2010 Skal se om jeg klarer å forklare hvorfor det skjer i eksemplet du gir. <img src="<?php profile_image($userid,'thumb'); ?>"> Her blir delen før "<?php" skrevet til browser, så blir php koden kjørt, som bruker "echo" og da sender den stringen direkte til browser. Så blir "> delen skrevet. Resultat, slik du vil ha det. echo'<img src="'.profile_image($userid,'thumb').'">'; Når du kjører echo her blir resten av linjen evaluert, din funksjon blir kjørt som del av evalueringen, den skriver strengen med url til browser (via echo), og returnerer ingenting. SÅ, etter at det er gjort, blir return verdien (som er ingenting) satt inn der som src="" skal være, og så sendt til browser. Resultat, du får url når funksjon blir kjørt, ikke hvor du har plassert den Tekniske ting: * Evaluering av echo '<img src="'.profile_image($userid,'thumb').'">'; : 1. Start med streng <img src=" 2. Kjør funksjon profile_image($userid,'thumb') 3. Legg til retur-verdi av den funksjonen til slutten av streng fra 1. 4. Ta streng "> og legg til slutten av streng fra 3. 5. Returner det resultatet som èn streng til "echo" kommandoen. 6. Echo kommandoen sender strengen til browseren * Med "sendt til browser" så mener jeg skrevet til minne-buffer som så webserver sender til browser Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå