References uitgelegd
08-03-2009 14:02
Offline Stuur privëbericht
Welkom,
deze php tut gaat dus over references...

Benodigdheden:
- Basis kennis van PHP

Reference is letterlijk vertaald een verwijzing...
Nu hoop ik dat jullie al een idee krijgen wat je hiermee kan doen...

Een reference maak je op de volgende manier:
Code | Selecteer Alles
minimaliseren
1
2
3
<?php
$var 
'ik ben $var';
$reference = &$var;

Je gebruikt dus het &amp;-teken...

Verder werkend op de vorige code:
Code | Selecteer Alles
minimaliseren
1
2
3
4
5
<?php
$reference 
'ik ben $reference';

echo 
$reference// ik ben $reference
echo $var// ik ben $reference

Geschokt?
Eigenlijk zijn alle variabelen verwijzingen naar waarden...
Wanneer je een reference maakt voeg je eigenlijk een reference (verwijzing) toe aan een waarde...
Niet aan de verwijzing van die waarde...

Nu vraag je je misschien af wat je hier nou mee moet...
ik zal een praktisch voorbeeld geven...
Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
    
function add_magic_quotes($value) {
        if (!
get_magic_quotes_gpc()) {
            if(
is_array($value)) {
                
$value array_map('add_magic_quotes'$value);
            }
            else if(
is_string($value)) {
                
$value addslashes($value);
            }
        }
        return 
$value;
    }

    
$_POST        array_map('add_magic_quotes'$_POST);
    
$_GET        array_map('add_magic_quotes'$_GET);
    
$_COOKIE        array_map('add_magic_quotes'$_COOKIE);

Deze code gaan we (of eigenlijk ik) herschrijven gebruik makend van references...
Dan krijgen we (ok, ik) dit:
Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
    
function add_magic_quotes(&$value) { // let op de &
        
if (!get_magic_quotes_gpc()) {
            if(
is_array($value)) {
                
array_map('add_magic_quotes', &$value);    // "$value = " hoeft niet meer dankzij de reference
            
}
            else if(
is_string($value)) {
                
$value addslashes($value);
            }
            return 
true;    // return true als magic_quotes On staat
                        // ik dacht laten we nog iets "nuttigs" doen met de return
                        // aangezien "return $value;" overbodig is dankzij references
        
}
        return 
false;        // return false als magic_quotes Off staat
    
}

    
array_map('add_magic_quotes'$_POST);    // geen "$_POST = " meer nodig
    
array_map('add_magic_quotes'$_GET);    // geen "$_GET = " meer nodig
    
array_map('add_magic_quotes'$_COOKIE);    // geen "$_COOKIE = " meer nodig


Je hebt global statement dus niet meer nodig...
Eigenlijk is het gobal statement niet veel meer dan een reference toekennen
Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$foo 
'bar';
$bar 'foo';

    function 
foo() {
        global 
$foo;

        
$foo 'foo';
    }

    function 
bar() {
        
$bar = &$GLOBALS['bar']; // $GLOBALS is een superglobal

        
$bar 'bar';
    }

    
foo();
    
bar();
    echo 
$foo $bar// 'foobar'


Zoals ik eerder al zei is het toekennen van een reference (verwijzing) het toekennen van een nieuwe reference aan een waarde...
Verder werkend op de eerste twee code blokken:
Code | Selecteer Alles
minimaliseren
1
2
3
4
5
<?php
unset($reference);

echo 
$reference// Notice: Undefined variable: reference in /Users/darsstar/Sites/test.php on line X
echo $var// 'ik ben $reference'

Je ziet dus dat $var nog steeds toegewezen is een de waarde 'ik ben $reference'
Denk nu niet dat als je een niet bestaande variabele de zelfde waarde geeft dit een reference is...

Dus,
hopelijk heb je wat geleerd door dit door te lezen...

Darsstar
Er werd nog geen reactie geplaatst.