(heen en weer) Kopieeren van een objecten

Vaak volstaat het heen en weer kopieren van objecten prima..
Een voorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
    // Een functie om 20 euro aan het saldo van een client toe te voegen
    function addTwentyEuro($client)
    {

        $client->setCash($client->getCash() + 20);
        print("<p>" . $client->toString() . "</p>"); // #1
    }

    $client = new Client("Pholeron", 100); // Maak een nieuwe client
    addTwentyEuro($client); // Voeg 20 euro toe aan het saldo

    print("<p>" . $client->toString() . "</p>"); // #2
?>


Probleem waar we in dit voorbeeld tegenaan lopen is dat in de functie addTwentyEuro() een kopie is ontstaan van het object. Het saldo wordt aangepast in de kopie (#1), maar niet in het origineel (#2).

Dit is eenvoudig te verhelpen met de volgende oplossing, die overigens nog steeds geen gebruik maakt van references (een beetje PHP'er had dit zelf kunnen bedenken (:

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
<?
    // Een functie om 20 euro aan het saldo van een client toe te voegen
    function addTwentyEuro($client)
    {

        $client->setCash($client->getCash() + 20);
        print($client->toString()); // Print #1
        return $client;
    }


    $client = new Client("Pholeron", 100); // Maak een nieuwe client
    $client = addTwentyEuro($client); // Voeg 20 euro toe aan het saldo

    print("<p>" . $client->toString() . "</p>"); // Print #2
?>


Als ik dit al kan, wat moet ik dan references?? Lees gewoon ff verder (:

Stel je hebt meerdere clienten waarop je handelingen wilt verrichten

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
21
22
23
24
25
26
27
28
29
<?
    $clienten
= array(new Client("Pholeron", 100), new Client("PHPHulp.nl", 75), ...);

    // Zoek een client op in de array $clienten op basis van de naam
    function getClient($name)
    {

        for($i = 0; $i < sizeof($clienten); $i++)
        {

            if(strcasecmp($clienten[$i]->getName(), $name) === 0)
            {

                return $clienten[$i]; // Geeft een KOPIE!! van het object terug
            }
        }


        return null; // Gebruik bij 'geen object' liever een 'null' i.p.v. bijvoorbeeld een 'false' (of wat dan ook). Wordt in dit voorbeeld niet afgevangen.
    }

    // Een functie om 20 euro aan het saldo van een client toe te voegen
    function addTwentyEuro($client)
    {

        $client->setCash($client->getCash() + 20);
        print($client->toString()); // Print #1
        return $client;
    }


    // Nu willen we aan de client 'PHPHulp.nl' 20 euro toevoegen..
    $client = getClient('PHPHulp.nl"); // Zoek de client op
    $client = addTwentyEuro($client); // Voeg 20 euro toe aan het saldo
?>


Omdat we echter een kopie hebben van de client en niet het origineel, moeten we als we het origineel gaan terugzoeken in de array $clienten en deze overschrijven. Al deze extra handelingen zijn echter zeer onwenselijk.. De oplossing: references (:

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Waarom deze tutorial:
  2. Voorbereiding
  3. Wat is het nut van references
  4. (heen en weer) Kopieeren van een objecten
  5. References in het algemeen
  6. References als argument van een functie
  7. References als resultaat van een functie
  8. Samenvatting

PHP tutorial opties

 
 

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.