Vraag over functies
Beste leden,
Graag wil ik jullie hulp gebruiken om te begrijpen wat er gebeurt, en waarom je zoiets zou gebruiken?
Het volgende code komt bij mij heel verwarrend over. Met name door het "&" teken.
function &query($sql)
{
$result = mysql_query($sql);
return $result;
}
Als deze functie wordt aangeroepen, wat gebeurt er dan? Waarom zou je dit gebruiken. Een functie gebruik je om iets te doen, of om een variable terug te geven?
Kan iemand mij uitleggen wat in het voorbeeldcode gebeurt?
alvast bedantk,
roody
Graag wil ik jullie hulp gebruiken om te begrijpen wat er gebeurt, en waarom je zoiets zou gebruiken?
Het volgende code komt bij mij heel verwarrend over. Met name door het "&" teken.
function &query($sql)
{
$result = mysql_query($sql);
return $result;
}
Als deze functie wordt aangeroepen, wat gebeurt er dan? Waarom zou je dit gebruiken. Een functie gebruik je om iets te doen, of om een variable terug te geven?
Kan iemand mij uitleggen wat in het voorbeeldcode gebeurt?
alvast bedantk,
roody
In mijn ogen is het niets meer dan een functie die een andere functie gebruikt en vervolgens het resultaat terug geeft. Oftewel het doel is geweest een kortere schrijfwijze voor de functie mysql_query. Wat ook goed mogelijk is, en dat denk ik eerder is dat er eerst gekeken word naar de database soort en vervolgens word er dmv een if-else constructie de functie &query toegewezen aan ofwel mysql ofwel aan een andere datbase. Het voordeel van deze methode is dat je bij het veranderen van de database niet het hele script hoeft de veranderen.
Met de & kun je een variabele 'by reference' meegeeft. Dat betekent dat de inhoud van de oorspronkelijke variabele verandert zal worden en dat er geen kopie van de variabele gebruikt wordt.
Zie dit voorbeeldje voor een toepassing ervan:
Zie dit voorbeeldje voor een toepassing ervan:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
function byReference(&$sString)
{
$sString = 'Een ander voorbeeldje';
}
function notByReference($sString)
{
$sString = 'Een ander voorbeeldje';
}
$sString = 'Een voorbeeldje';
// $sString verandert niet
notByReference($sString);
echo $sString.'<br>';
// $sString verandert wel
byReference($sString);
echo $sString.'<br>';
?>
function byReference(&$sString)
{
$sString = 'Een ander voorbeeldje';
}
function notByReference($sString)
{
$sString = 'Een ander voorbeeldje';
}
$sString = 'Een voorbeeldje';
// $sString verandert niet
notByReference($sString);
echo $sString.'<br>';
// $sString verandert wel
byReference($sString);
echo $sString.'<br>';
?>
Quote:
Met de & kun je een variabele 'by reference' meegeeft.
Kan ik dit zien als een soort "Read-only" ?
'Jacco:
Kan ik dit zien als een soort "Read-only" ?
Quote:
Met de & kun je een variabele 'by reference' meegeeft.
Kan ik dit zien als een soort "Read-only" ?
Toch juist het omgedraaide? Want met die & veranderd de waarde wel.
@Jacco: zoals Scrptr al zegt, juist niet. Met de & maak je een verwijzing naar een bepaalde variabele en alle wijzigingen die je aanbrengt zullen ook op de oorspronkelijke variabele toegepast worden.
Meer informatie over dit onderwerp vind je in de php.net handleiding.
Meer informatie over dit onderwerp vind je in de php.net handleiding.
Damn wat ben ik blont
*Schreeuwt in spiegel RTFM*
*Schreeuwt in spiegel RTFM*
Dit is allemaal wel juist, maar de TS heeft het over een & teken voor de functienaam en niet bij de variabelen.
Dit heb ik echter zelf nog nooit tegengekomen en kan er dus ook niets over vertellen, hopelijk iemand anders wel.
Dit heb ik echter zelf nog nooit tegengekomen en kan er dus ook niets over vertellen, hopelijk iemand anders wel.
Bij mij levert het op alle door mij geprobeerde manieren een notice op:
Ik denk dat het oorspronkelijke idee was dat je op deze manier een reference naar de resultatenset van mysql_result krijgt, waardoor PHP niet een kopie ervan hoeft te maken. Maar volgens mij doet PHP dat zelf al lang niet meer, en optimaliseert hij dit soort dingen vanzelf.
Quote:
En verder is er geen merkbaar verschil met of zonder &.PHP Notice: Only variable references should be returned by reference in /- on line 4 PHP Stack trace: PHP 1. {main}() /-:0 PHP 2. doeIets() /-:10
Ik denk dat het oorspronkelijke idee was dat je op deze manier een reference naar de resultatenset van mysql_result krijgt, waardoor PHP niet een kopie ervan hoeft te maken. Maar volgens mij doet PHP dat zelf al lang niet meer, en optimaliseert hij dit soort dingen vanzelf.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
Quote:
Daar heb je helemaal gelijk in! Niet goed gekeken.maar de TS heeft het over een & teken voor de functienaam
Maar goed, de & voor een functienaam heeft in PHP de betekenis dat de functie een reference naar een variabele teruggeeft in plaats van een echte variabele. Een goed voorbeeldje van de toepassing hiervan, kun je in dit artikel vinden.
Hallo Blanche,
Met de variablen kan ik nog begrijpen:
$a = 5;
$b = &$a;
echo $b; // geeft 5, toch?
Maar waarom er een "&"teken na een functie declaratie staat, begrijp ik nog steeds niet. Of denk ik gewoon te moeilijk...
Nog een voorbeeld gevonden op:
echo "test";
$foo = "123";
function return_value() {
global $foo;
return $foo;
}
$bar = &return_value();
echo "bar: $bar<br><br>"; // dit geeft als resultaat bar: 123
-> 10 minuten laten (ff laten bezinken) -> ok -> in dit voorbeeld zou dit korter zijn: $bar = $foo; ?
Dus met & geef je aan dat je met de echte waarde werkt. Staat het voor een functie, dan betekent dat, de variable die terug gegeven wordt, daar werk je mee..?
Maar wanneer zou je zoiets gebruiken? Maakt dat het code lastiger te lezen?
OF is het om memory/ resources te besparen?
Met de variablen kan ik nog begrijpen:
$a = 5;
$b = &$a;
echo $b; // geeft 5, toch?
Maar waarom er een "&"teken na een functie declaratie staat, begrijp ik nog steeds niet. Of denk ik gewoon te moeilijk...
Nog een voorbeeld gevonden op:
echo "test";
$foo = "123";
function return_value() {
global $foo;
return $foo;
}
$bar = &return_value();
echo "bar: $bar<br><br>"; // dit geeft als resultaat bar: 123
-> 10 minuten laten (ff laten bezinken) -> ok -> in dit voorbeeld zou dit korter zijn: $bar = $foo; ?
Dus met & geef je aan dat je met de echte waarde werkt. Staat het voor een functie, dan betekent dat, de variable die terug gegeven wordt, daar werk je mee..?
Maar wanneer zou je zoiets gebruiken? Maakt dat het code lastiger te lezen?
OF is het om memory/ resources te besparen?
Quote:
Nee, want dan maak je een kopie van de variabele en kun je alles met $bar doen zonder dat dat $foo beïnvloedt. zou dit korter zijn: $bar = $foo;
Als je een variabele als referentie (dus met &) meegeeft zal alles dat je met $bar doet automatisch ook met $foo gebeuren. $bar is immers maar een referentie (directe link, connectie, hoe je het noemen wilt) naar $foo.
Maar zie dat artikel waarvan ik de link gaf, daar wordt nog een voorbeeldje gegeven...
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Hey Blanche,
Kwartje valt bijna ;)
Ben tussendoor artikel aan het lezen, en dat verklaart een heleboel!
Thanx voor jullie hulp.
Kwartje valt bijna ;)
Ben tussendoor artikel aan het lezen, en dat verklaart een heleboel!
Thanx voor jullie hulp.




