[php] functie, waarde(s) retourneren

Pagina: 1
Acties:

  • HenkS
  • Registratie: Mei 2000
  • Laatst online: 20:07

HenkS

Da_king alias HenkS

Topicstarter
ik zat net wat code aan te passen en kwam deze functie tegen:

known_domains_subnets_ranges("",&$show_domains,&$show_subnet,&$show_range,&$show_range_info);


normaal ben ik gewend, als bv $show_range gevuld moet worden dat je zoiets hebt:

$show_range = functie($blaat);

maar dit is dus heel iets anders, want onder bovenstaande functie, is $show_range ook opeens gevuld... hoe werkt het precies met dat & , want als je op deze manier altijd een $var kunt vullen, waarom zou je dan nog $var = functie(); doen? ik snap het principe cq werking niet echt...

  • mjax
  • Registratie: September 2000
  • Laatst online: 02-09 04:48
Dat is het verschil tussen "pass by value" (wat jij gewend bent) en "pass by reference" (de & constructie).

Bij "pass by value" waarde de waarde van een variabele als parameter doorgegeven, dus niet de variabele zelf. Wijzigingen van deze parameter binnen de subroutine hebben geen effect op de originele variabele.

Bij "pass by reference" wordt een reference (pointer) doorgegeven als parameter. Wijzigingen van deze parameter binnen de subroutine, wijzigen dan de inhoud van de originele parameter.

  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 09:15

Hu9o

Schokkend

Op donderdag 30 mei 2002 10:02 schreef mjax het volgende:
Dat is het verschil tussen "pass by value" (wat jij gewend bent) en "pass by reference" (de & constructie).

Bij "pass by value" waarde de waarde van een variabele als parameter doorgegeven, dus niet de variabele zelf. Wijzigingen van deze parameter binnen de subroutine hebben geen effect op de originele variabele.

Bij "pass by reference" wordt een reference (pointer) doorgegeven als parameter. Wijzigingen van deze parameter binnen de subroutine, wijzigen dan de inhoud van de originele parameter.
idd, vind je bij iedere programeertaal terug.

>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<


Verwijderd

Is nuttig bijvoorbeeld bij bewerkingen op arrays. Als je een array die je nog gaat gebruiken wilt sorteren ga je niet eerst een copie aan een functie geven en later de returnvalue over het orgineel heen zetten, dan laat je die functie fijn de orginele array sorteren.

  • eborn
  • Registratie: April 2000
  • Laatst online: 04-09 10:47
En het is ook heel handig als je meerdere waarden wilt retourneren. Anders zou je altijd een container (struct, klasse) hiervoor moeten maken. Nu kun je zoveel parameters meegeven als je wilt, die je allemaal kunt wijzigen.

Maar als ik één return waarde heb gebruik ik ook altijd nog gewoon het return statement :)

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

En nog een puntje:
als je met wat grotere datastructures gaat werken etc, is het ook gewoon nog eens sneller, omdat er geen clone gemaakt hoeft te worden van objecten. Nou zal dat in PHP wel meevallen, maar dat zal je in de toekomst in andere talen toch veel meer tegen gaan komen

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017

RSD

Is dit niet erg handig bij recursieve functies??? Volgensmij wel toch?

  • eborn
  • Registratie: April 2000
  • Laatst online: 04-09 10:47
Op donderdag 30 mei 2002 10:44 schreef drm het volgende:
als je met wat grotere datastructures gaat werken etc, is het ook gewoon nog eens sneller, omdat er geen clone gemaakt hoeft te worden van objecten. Nou zal dat in PHP wel meevallen, maar dat zal je in de toekomst in andere talen toch veel meer tegen gaan komen
Nou, als ik in PHP een array maak van 100 MB dan denk ik dat je dat ook wel merkt bij 'pass by value' ;)

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

RSD:
Is dit niet erg handig bij recursieve functies???
Ligt er natuurlijk maar net aan, of je ook in recursieve functies meerdere variabelen wilt aanpassen. Het feit dat het dan recursie bevat is in feite natuurlijk irrelevant
eborn:
Nou, als ik in PHP een array maak van 100 MB dan denk ik dat je dat ook wel merkt bij 'pass by value' ;)
Dat denk ik ook, maar ik denk niet dat je zo gauw een array van 100 MB hebt in PHP ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • eborn
  • Registratie: April 2000
  • Laatst online: 04-09 10:47
Op donderdag 30 mei 2002 11:16 schreef drm het volgende:
Dat denk ik ook, maar ik denk niet dat je zo gauw een array van 100 MB hebt in PHP ;)
Ikke wil alle access logs van Apache van 't afgelopen jaar concatten en dan regel voor regel doorlopen ;)

Maar je hebt gelijk, bij normaal gebruik zul je zo'n array niet vaak tegenkomen. En dan kun je je misschien zowiezo gaan afvragen of je het niet beter anders kunt gaan oplossen :)
Pagina: 1