Gå til innhold

functions best practice


Anbefalte innlegg

Utgangspunktet er en funksjons-basert (ikke oop) webapplikasjon.

 

Typiske funksjoner er f.eks.:

 

function en ($param1,$param2), function to($param1,$param2,$param3 etc..)

 

Min tanke er at det er veldig fristende å bruke en enkelt array istedet for mange parametere, slik:

 

function en (param){

 

$param1 = $param['en']

$param2 = $param['to']

 

}

 

Grunnen til at jeg spør her er fordi jeg ikke ser denne praksisen brukt i hverken eksempler eller kode jeg har sett på, hvorfor?

 

Noen tanker, innvendinger,erfaringer, mulige problemer?

Lenke til kommentar
Videoannonse
Annonse

Man bruker ofte arrays når det ikke finnes et endelig antall parametere eller hvor mange som blir gitt. F.eks. har jeg en form-klasse, som printer ut pene forms definert av blant annet arrays. Her kunne jeg lagt til en class-attribute til <form> uten å ha laget eksplisitt støtte for det, fordi jeg bruker arrays.

 

$gameForm = array (
			   'attributes' => array (
									  'method' => 'post',
									  'action' => getUrl (),
									  'enctype' => 'multipart/form-data'
									 ),
			   'fields' => array ()
			  );

Endret av Jonas
Lenke til kommentar

Det er litt en smakssak, og det avhenger veldig av hva metoden gjør og hvor mange argumenter den egentlig trenger. I eksempelet ditt bytter du ut to korte argumenter med et lite array. Her mener jeg det ville vært mer oversiktelig å bruke argumentene direkte. Om du derimot skal lese mange (les: over 6) argumenter bør du vurdere å bruke arrays, eller eventuelt sende en peker til objektet du skal modifisere inn i funksjonen/metoden.

 

I tilfeller der en ikke nødvendigvis vet hvor mange argumenter på forhånd eller det metodens natur tilsier at antall argumenter vil variere, kan det være greiere å sende et array, og heller løpe over arrayet i metoden, selv om antall argumenter kan være få i enkelte tilfeller. :)

Lenke til kommentar

Både Jonas og jorgis er inne på grunnen til at jeg spør.

 

En ting er å utvide en funksjon og behøve flere parametere. Da må man oppdatere alle stedene hvor man har kalt opp funksjonen.

 

En annen ting er når parameterne varierer, f.eks. url-parametere.

 

Jeg glemte å nevne at konsekvensen av å bruke bare en array blir jo da at man får en array av arrays. F.eks har jeg alle språkverdiene i array $lang. For å kunne bruke den i min funksjon må jeg da bruke:

 

$param['lang'] = $lang;

 

function fnc($param){

 

$lbl1 = $param['lang']['lbl1'];

$lbl2 = $param['lang']['lbl2'];

 

}

 

Dette kan jo fort bli litt omfattende og jeg sender jo unødvendig mye av gårde til hver funksjon, men latskapen i meg klynger seg til et håp om å kunne forsvare en slik praksis :whistle:

Lenke til kommentar
En ting er å utvide en funksjon og behøve flere parametere. Da må man oppdatere alle stedene hvor man har kalt opp funksjonen.

 

En annen ting er når parameterne varierer, f.eks. url-parametere.

 

Dette gjelder kun når en ikke setter default-verdier på parametre.

 

function foobar($foo, $bar) {}

 

kan lett utvides til

 

function foobar($foo, $bar, $baz = true) {}

 

uten å egentlig behøve å endre alle kall til funksjonen.

Lenke til kommentar
Dette gjelder kun når en ikke setter default-verdier på parametre.

 

function foobar($foo, $bar) {}

 

kan lett utvides til

 

function foobar($foo, $bar, $baz = true) {}

 

uten å egentlig behøve å endre alle kall til funksjonen.

 

Ok, takk.

 

Og beklager at jeg har glemt å bruke kodeboksen. Jeg så det nå.

Lenke til kommentar

Arrayer kan være veldig fine å bruke som parametere de.

Det er litt penere i ruby, men du får ganske bra resultat ved å bruke.

 

function abc($params = array())
{
extract(array_merge(
	array(
		'width' => 400,
		'height' => 120,
		'title' => 'Min tittel'
	), $params));


print_r(compact('width', 'height', 'title'));
}

abc();

abc(array('width' => 200));

Array

(

[width] => 400

[height] => 120

[title] => Min tittel

)

Array

(

[width] => 200

[height] => 120

[title] => Min tittel

)

 

I et typesvakt språk som PHP er det ganske hipp som happ hva du bruker, men med assosiative arrays slipper du å tenke på rekkefølgen av parameterene, og det å måtte angi riktig standardverdi dersom du skal hoppe over et parameter.

 

Dersom du trenger typesjekk derimot kommer det litt mer an på.

I PHP kan du ikke angi standard-verdi på et typesjekket parameter som annet enn null, noe som kan være irriterende, men du får jo gratis typesjekk.

Derimot kan du sjekke manuellt med arrays, og du kan angi standardverdier.

 

Hipp som happ :) Kommer bare an på hva man liker.

Endret av Peter
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...