(heen en weer) Kopieeren van een objecten
Vaak volstaat het heen en weer kopieren van objecten prima..
Een voorbeeld:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
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
?>
// 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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
?>
// 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)
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
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
?>
$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 (:
« vorige pagina | volgende pagina »
Inhoudsopgave
- Waarom deze tutorial:
- Voorbereiding
- Wat is het nut van references
- (heen en weer) Kopieeren van een objecten
- References in het algemeen
- References als argument van een functie
- References als resultaat van een functie
- Samenvatting