Vraag over functies
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.
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 schreef op 29.04.2008 11:16:
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.
*Schreeuwt in spiegel RTFM*
Dit heb ik echter zelf nog nooit tegengekomen en kan er dus ook niets over vertellen, hopelijk iemand anders wel.
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.
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
Kwartje valt bijna ;)
Ben tussendoor artikel aan het lezen, en dat verklaart een heleboel!
Thanx voor jullie hulp.