[Php + GD] functie return $y niet

Pagina: 1
Acties:

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 22:05

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

Topicstarter
Ik zit met een probleem met GD. Ik probeer een poll in beeld te brengen, zie hier voor een voorbeeld. De stelling staat bovenaan in het vet, daaronder moeten de gekozen keuzes komen.

Daar komt dus een probleem. Ik moet een manier bepalen, waarmee ik kan achterhalen wat de laatste hoogte was, omdat de stelling variabel is (dus ook de lengte verschilt). Ik gebruik voor het inzetten van de tekst deze functie:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// zet automatisch een string als hij te lang is op een nieuwe regel
function imagestringwrap($image, $font, $x, $y, $text, $color, $maxwidth){
     $fontwidth = ImageFontWidth($font)+1;
     $fontheight = ImageFontHeight($font);
     if ($maxwidth != NULL) {
          $maxcharsperline = floor($maxwidth / $fontwidth);
          $text = wordwrap($text, $maxcharsperline, "\n", 1);
     }
     $lines = explode("\n", $text);
     while (list($numl, $line) = each($lines)) {
          ImageString($image, $font, $x, $y, $line, $color);
          $y += $fontheight;
     }
}

Zoals je ziet wordt er bij $y telkens de hoogte van het font opgeteld. Ik dacht dat gewoon af te vangen was door $y, maar deze komt niet terug ofzo.

Ik heb er dus een return $y onder gezet, maar hij komt nog steeds niet terug. Wanneer ik een echo $y doe ipv een image jpeggen, staat $y nog steeds als 5 (de beginwaarde). Ook wanneer ik hem laat globalen in die functie werkt hij niet. Dat waren toch ongeveer alle mogelijkheden wel :?

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

je mist zowieso de return
en je moet anders ff naar functie aanroepen kijken bij reference ipv bij value

Doet iets met Cloud (MS/IBM)


  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 22:05

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

Topicstarter
D2k > natuurlijk zit die er dus wel in :) Die post is getypt terwijl ik vanalles uitprobeerde :)

Wat bedoel je met dat laatste (en je moet anders ff naar functie aanroepen kijken bij reference ipv bij value)?

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Je geeft de waarde 'by value' mee, dit betekend dat binnen de scope van de functie (dus tussen de { en de } ) een $y bestaat die alleen daar bestaat. Deze is een copy van degene die je in de aanroep van de functie hebt gezet. Het orgineel (dat je dus opgeeft bij elke aanroep) blijft onveranderd. Als je een variabele 'by reference' doorgeeft, wordt niet de waarde, maar de locatie van die var meegegeven. In dat geval is de $y binnen de scope van die functie dezelfde als daarbuiten en veranderd ook mee.

voorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function byValue($var){
  $var++;
}
function byReference(&$var){
  // Preciese syntax weet ik zo niet, maar ik dacht 
  // dat het zo was. check voor de zekerheid de manual
  $var++;
}

$bar = 0;
byValue($bar);
echo $bar; 
// bar is hier nogsteeds 0, de kopie binnen de functie is 
// wel opgehoogd naar 1, maar die bestaat hier niet meer
byReference($bar);
echo $bar; 
// nu is bar wel 1. Dit komt omdat $var binnen de functie 
// en $bar dezelfde var waren en dus eigenlijk $bar 1 is opgehoogd.

[ Voor 0% gewijzigd door Janoz op 12-09-2002 22:38 . Reden: php tag natuurlijk wel afsluiten he :) ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • GraasGast
  • Registratie: Oktober 2000
  • Laatst online: 04-08 13:06

GraasGast

Analogue Heaven

offtopic vraagje, zit je toevallig op het dalton?

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 22:05

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

Topicstarter
Janoz, bedankt voor de zeer heldere uitleg *D Ik ga het zo proberen, ik dacht ik dat het iets met de var. binnen de functie te maken had, heb zoiets ook ooit met javascript gehad.

GraasGast, hoe raad je het zo :P Jij ook?

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

In Pascal kon je inderdaad een call by reference doen mbv het 'var' keyword. Ik weet niet of dit ook in javascript kan. In Java kan je namelijk geen call by reference doen, daar kan je alleen gebruik maken van een wrapper class. Dus ik weet niet of zo dan wel een faciliteit doorvoor in javascript hebben gemaakt.

Als ik eerlijk ben ben ik wel een beetje huiverig voor een call by reference. Maarja... ik ben ook maar een (functionele) java aap :)
Pagina: 1