Vraag over functies

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ric swave

ric swave

29/04/2008 10:33:00
Quote Anchor link
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
 
PHP hulp

PHP hulp

22/11/2024 07:38:59
 
Scrptr

Scrptr

29/04/2008 11:11:00
Quote Anchor link
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.
 
Joren de Wit

Joren de Wit

29/04/2008 11:14:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
?>
 
Jacco Engel

Jacco Engel

29/04/2008 11:16:00
Quote Anchor link
Quote:
Met de & kun je een variabele 'by reference' meegeeft.


Kan ik dit zien als een soort "Read-only" ?
 
Scrptr

Scrptr

29/04/2008 11:17:00
Quote Anchor link
Jacco schreef op 29.04.2008 11:16:
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.
 
Joren de Wit

Joren de Wit

29/04/2008 11:22:00
Quote Anchor link
@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.
 
Jacco Engel

Jacco Engel

29/04/2008 11:24:00
Quote Anchor link
Damn wat ben ik blont

*Schreeuwt in spiegel RTFM*
 
Hipska BE

Hipska BE

29/04/2008 11:26:00
Quote Anchor link
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.
 
Jelmer -

Jelmer -

29/04/2008 11:31:00
Quote Anchor link
Bij mij levert het op alle door mij geprobeerde manieren een notice op:
Quote:
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
En verder is er geen merkbaar verschil met of zonder &.


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 -
 
Joren de Wit

Joren de Wit

29/04/2008 11:36:00
Quote Anchor link
Quote:
maar de TS heeft het over een & teken voor de functienaam
Daar heb je helemaal gelijk in! Niet goed gekeken.

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.
 
Ric swave

ric swave

29/04/2008 11:39:00
Quote Anchor link
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?
 
Joren de Wit

Joren de Wit

29/04/2008 11:43:00
Quote Anchor link
Quote:
zou dit korter zijn: $bar = $foo;
Nee, want dan maak je een kopie van de variabele en kun je alles met $bar doen zonder dat dat $foo beïnvloedt.

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
 
Ric swave

ric swave

29/04/2008 11:49:00
Quote Anchor link
Hey Blanche,



Kwartje valt bijna ;)

Ben tussendoor artikel aan het lezen, en dat verklaart een heleboel!
Thanx voor jullie hulp.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.